๋‹ฌ๋ฆฌ๊ธฐ๋ฐ˜๐Ÿƒ | ์‹ค์Šต 2์ผ์ฐจ ๋ณต์Šตํ•˜๊ธฐ

ํ•˜์˜ยท2024๋…„ 7์›” 27์ผ

etc.

๋ชฉ๋ก ๋ณด๊ธฐ
8/26


^ ์ฃผ๋ง์•Œ๋ฐ” ๋๋‚˜๊ณ  ์Šคํ„ฐ๋””ํ•˜๋Š” ๋‚˜ ์ œ๋ฒ• ๋ฉ‹์ ธ์š”(์ž์˜์‹๊ณผ์ž‰)


๋‹ฌ๋ฆฌ๊ธฐ๋ฐ˜ ์‹ค์Šต 2๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ์ข€ ์–ด๋ ค์› ๋‹ค.
๋‹ค๋“ค ํ›„๋ผ๋ฝ ํ’€๊ณ  ๊ฐ€๋Š”๋ฐ ๋‚˜๋Š” ์–•์€๋ณต์‚ฌ, ๊นŠ์€๋ณต์‚ฌ๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ’€๊ธฐ ๋ง‰๋ง‰ํ–ˆ๊ณ  (ํ’€๊ณ ๋‚˜๋‹ˆ๊นŒ ๊ฐ„๋‹จํ•จ;;) ๋ฐฐ์—ด๋ฉ”์†Œ๋“œ๋ฅผ ์ฝ”๋“œ์นดํƒ€ ํ•˜๋ฉด์„œ ์ข€ ์ต์ˆ™ํ•ด์กŒ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์•„๋‹ˆ๋ผ๋Š”๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค.๐Ÿ˜ฅ
ํŠœํ„ฐ๋‹˜์ด ํ•ด์ฃผ์‹  ํ•ด์„ค์„ธ์…˜ ๋ณด๋ฉด์„œ ๋‚ด๊ฐ€ ์“ด ๋‹ต๊ณผ ๋น„๊ตํ•ด๋ดค๊ณ  ๋ณต์Šตํ•˜๋ฉด์„œ ์ œ๋Œ€๋กœ ์•Œ๊ณ  ์ƒˆ๋กœ์šด๊ฒƒ๋„ ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ ค๊ณ  TIL ์ฃผ์ œ๋กœ ์ •ํ•ด๋”ฐ!



์–•์€ ๋ณต์‚ฌ, ๊นŠ์€ ๋ณต์‚ฌ ์˜ˆ์ œ

01. ์–•์€ ๋ณต์‚ฌ

// ์˜ˆ์‹œ
const arr1 = [1, 2, 3];
const arr2 = arr1;
arr2[0] = 10;
console.log(arr1);
console.log(arr1 === arr2);

์œ„ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

const obj1 = { a: 1, b: 2, c: 3 };
/* ๋ฌธ์ œ 1-1) obj1์„ ์–•์€ ๋ณต์‚ฌํ•˜๋Š” ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š” */
const obj2 = obj1 

/* ๋ฌธ์ œ 1-2) obj2์— d๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. d๋Š” 4์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. */
obj2.d = 4;

/* ๋ฌธ์ œ 1-3) ํ•ด๋‹น๊ฐ’ obj1, obj2์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š” */
console.log(obj1); // { a: 1, b: 2, c: 3, d: 4 }
console.log(obj2); // { a: 1, b: 2, c: 3, d: 4 }

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋ฐ”๋กœ ํ• ๋‹นํ•ด๋ฒ„๋ฆฌ๋ฉด ์–•์€๋ณต์‚ฌ๊ฐ€ ๋˜๊ณ  ํ• ๋‹นํ•œ ๊ฐ์ฒด์—๋Š” ์ฐธ์กฐํ•˜๋Š” '์ฃผ์†Œ'๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.
์–•์€๋ณต์‚ฌ๋ฅผ ํ•œ ํ›„ ์†์„ฑ๊ฐ’์„ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋ฉด ๋™์ผํ•œ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›๋ณธ ์†์„ฑ๋„ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.


02. ๊นŠ์€ ๋ณต์‚ฌ

// ์˜ˆ์‹œ
function deepCopy(o) {
    var result = {};
    if (typeof o === "object" && o !== null)
        for (i in o) result[i] = deepCopy(o[i]);
    else result = o;
    return result;
}

๊นŠ์€๋ณต์‚ฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์€ ์˜ˆ์‹œ์ฝ”๋“œ ๋ง๊ณ  2๊ฐ€์ง€๊ฐ€ ๋” ์žˆ๋‹ค.

var arr2 = deepCopy(arr1);
var arr2 = JSON.parse(JSON.stringify(arr1));
var arr2 = structuredClone(arr1);
  • ์ฒซ๋ฒˆ์งธ๋Š” ์˜ˆ์‹œ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ๊ฑฐ๋ผ ๋™์ผ
  • ๋‘๋ฒˆ์งธ๋Š” JSON์„ ํ™œ์šฉํ•œ ๋ฐฉ์‹
  • ์„ธ๋ฒˆ์งธ๋Š” structuredClone ์‚ฌ์šฉ

์„ธ๊ฐ€์ง€ ์ค‘์—์„œ ์ƒํ™ฉ๊ณผ ํŽธ์˜์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
์ด๋ฒˆ์—๋Š” ๋งˆ์ง€๋ง‰ structuredClone์„ ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด๋ณด์•˜๋‹ค.

/* ๋ฌธ์ œ 2-1) arr2์˜ 0๋ฒˆ์งธ ๊ฐ์ฒด์— c๋ผ๋Š” ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐ’์„ 3์œผ๋กœ ํ• ๋‹นํ•ด์ฃผ์„ธ์š” */
arr2[0].c = 3;

/* arr1์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š” */ [{a:1}, {b:2}] 
/* arr2๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š” */ [{a:1, c: 3}, {b:2}]

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์ฒ˜์Œ์— 2-1 ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋‹ต์„ arr2[0] = {c=3}; ๋กœ ์ ์–ด์„œ ์ถœ๋ ฅ๊ฐ’์ด [{ c: 3 }, { b: 2 }] ๋กœ ๋‚˜์™€๋ฒ„๋ ธ๋‹ค.
์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ ๋ฌธ์ œ๋ฅผ ๊ผผ๊ผผํ•˜๊ฒŒ ๋‹ค์‹œ ์ฝ์–ด๋ณด์•˜๋”๋‹ˆ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค.
๋‚ด๊ฐ€ ์“ด ์ฝ”๋“œ๋Š” arr2์˜ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค ์†์„ฑ์„ ์•„์˜ˆ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ์ฝ”๋“œ์ด๊ณ ,
๋‹ต์•ˆ์€ arr2[0].c๋กœ ์†์„ฑ๋งŒ! ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ๊ทธ ๊ฐ’์ด 3์„ ๊ฐ€์ง€๋„๋ก ๋งŒ๋“ค์–ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์“ด ๋‹ต์ด ํ‹€๋ฆฌ๊ฒŒ ๋‚˜์˜จ ๊ฒƒ์ด๋‹ค.


03. ์–•์€, ๊นŠ์€ ๋ณต์‚ฌ

const student = {
    name: "yuno",
    age: "30",
    skill: ["javascript"],
    address: {
        city: "seoul"
    }
};

// 3-1) ์–•์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ shallowCopy๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”.
const shallowCopy = student;

// 3-2) ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ deepCopy๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”.
// const deepCopy = JSON.parse(JSON.stringify(student))
const deepCopy = structuredClone(student);

// 3-3) ์–•์€ ๋ณต์‚ฌ ๊ฐ์ฒด์™€ ์›๋ณธ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
console.log("1. ์›๋ณธ ๊ฐ์ฒด(student)์™€ ์–•์€ ๋ณต์‚ฌ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์„๊นŒ์š”?", true);
console.log(student === shallowCopy);


// 3-4) ์–•์€ ๋ณต์‚ฌ ๊ฐ์ฒด์˜ address์™€ ์›๋ณธ ๊ฐ์ฒด์˜ address๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
console.log("2. ์›๋ณธ ๊ฐ์ฒด์˜ address์™€ ์–•์€ ๋ณต์‚ฌ ๊ฐ์ฒด์˜ address๊ฐ€ ๊ฐ™์„๊นŒ์š”?", true);
console.log(student.address === shallowCopy.address);

// 3-5) ๊นŠ์€ ๋ณต์‚ฌ ๊ฐ์ฒด์™€ ์›๋ณธ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
console.log("3. ์›๋ณธ ๊ฐ์ฒด(student)์™€ ๊นŠ์€ ๋ณต์‚ฌ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์„๊นŒ์š”?", false);
console.log(student === deepCopy);

// 3-6) ๊นŠ์€ ๋ณต์‚ฌ ๊ฐ์ฒด์˜ address์™€ ์›๋ณธ ๊ฐ์ฒด์˜ address๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
console.log("4. ์›๋ณธ ๊ฐ์ฒด์˜ address์™€ ๊นŠ์€ ๋ณต์‚ฌ ๊ฐ์ฒด์˜ address๊ฐ€ ๊ฐ™์„๊นŒ์š”?", false);
console.log(student.address === deepCopy.address);

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป 3๋ฒˆ์€ ์–•์€๋ณต์‚ฌ์™€ ๊นŠ์€๋ณต์‚ฌ๋ฅผ ๋ชจ๋‘ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ œ์˜€๋‹ค.
์–•์€๋ณต์‚ฌ๋ฅผ ํ•  ๊ฒฝ์šฐ 1depth๊นŒ์ง€๋งŒ ๋ณต์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์ฒฉ๋œ๊ฐ์ฒด์˜ ์†์„ฑ๊นŒ์ง€ ์ ‘๊ทผํ•ด์„œ ์ž‘์—…ํ•˜๋ ค๋ฉด ๊นŠ์€๋ณต์‚ฌ๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.

// 3-7) ์–•์€ ๋ณต์‚ฌํ•œ ๊ฐ์ฒด์— ๋ฐฐ์—ด์š”์†Œ ๋ณ€๊ฒฝ javascript -> js์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š” 
shallowCopy.skill[0] = "js";
// ๊นŠ์€ ๋ณต์‚ฌ ๊ฐ์ฒด์˜ ์ฃผ์†Œ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜์„ธ์š” (์˜ˆ: city๋ฅผ "busan"์œผ๋กœ ๋ณ€๊ฒฝ)
deepCopy.address.city = "busan"

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๊ฐ์ฒด ์ฃผ์†Œ์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๊นŠ์€๋ณต์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋ฏ€๋กœ deepCopy๋กœ ์‚ฌ์šฉํ•ด์„œ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ณ , skill์˜ ๊ฒฝ์šฐ๋Š” 1depth์— ์žˆ๋Š” ๊ฐ์ฒด์ด๋ฏ€๋กœ ์–•์€๋ณต์‚ฌ๋กœ ๋ฐ”๋กœ ์†์„ฑ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.

๊ฒฐ๊ณผํ™•์ธ

//
1. ์›๋ณธ ๊ฐ์ฒด(student): {
  name: 'yuno',
  age: '30',
  skill: [ 'js' ],
  address: { city: 'seoul' }
}
///
2. ์–•์€ ๋ณต์‚ฌ๋œ ๊ฐ์ฒด(shallowCopy): {
  name: 'yuno',
  age: '30',
  skill: [ 'js' ],
  address: { city: 'seoul' }
}
///
3. ๊นŠ์€ ๋ณต์‚ฌ๋œ ๊ฐ์ฒด(deepCopy): {
  name: 'yuno',
  age: '30',
  skill: [ 'javascript' ],
  address: { city: 'busan' }
}


๋ฐฐ์—ด ๋ฉ”์†Œ๋“œ ์˜ˆ์ œ

04. ๋ฐฐ์—ด ๋ฉ”์†Œ๋“œ ์—ฐ์Šต(API)

4๋ฒˆ๋ฌธ์ œ(๋ผ๊ณ  ์“ฐ๊ณ  ์ƒˆ๋ผ๋ฌธ์ œ๊ฐ€ 10๊ฐœ๊ฐ€ ๋„˜์—ˆ๋˜..ใ…Ž)๋Š” ๋ฐฐ์—ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.
์šฐ์„  ๋ฌธ์ œ์™€ ํ’€์ด๋ฅผ ์ญ‰ ์ ๊ณ  ํ’€๋ฉด์„œ ์•Œ๊ฒŒ๋œ ๋ถ€๋ถ„๋งŒ ํ•˜๋‹จ์— ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

// 1. ๋ฐฐ์—ด API map ํ™œ์šฉ
// arr์˜ ๊ฐ ์š”์†Œ์— 10์„ ๊ณฑํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.
// ๊ฒฐ๊ณผ ๊ฐ’: [100, 200, 300]์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
var arr = [10, 20, 30]
let arr2 = arr.map(num => num * 10);
// console.log(arr2);


//2. ๋ฐฐ์—ด API filter ํ™œ์šฉ
// 5์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•ด์ฃผ์„ธ์š”.
// ๊ฒฐ๊ณผ๊ฐ’ [10]์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
var arr = [10, 22, 33]
let arrFive = arr.filter(num => num % 5 === 0);
// console.log(arrFive);


// 3. ํฌ๊ธฐ๊ฐ€ 15๋ณด๋‹ค ํฐ ์ˆซ์ž์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
// ์ถœ๋ ฅ๊ฐ’ [20, 25]
const numbers = [5, 10, 15, 20, 25];
let newNumbers = numbers.filter((num) => num > 15);
// console.log(newNumbers);


// 4. ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 4 ์ด์ƒ์ธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
var arr = ["banana", "kiwi", "mango", "strawberry", "lime", "orange", "plum", "cherry"];
let arrFour = arr.filter(str => str.length > 4);
// console.log(arrFour);


// 5. ์š”์†Œ์˜ ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜์ธ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
var arr = ["banana", "kiwi", "mango", "strawberry", "lime", "orange", "plum", "cherry"];
let arrOdd = arr.filter(odd => odd.length % 2 === 1);
// console.log(arrOdd)


// 6. ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”(์ ์  ์ปค์ง)
var arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3];
let sortArr = arr.sort((a, b) => a - b);
// console.log(sortArr);


// 7. age๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
var student = [
    { name: "์ดใ…‡ใ…‡", age: 25 },
    { name: "์ •ใ…‡ใ…‡", age: 30 },
    { name: "๊น€ใ…‡ใ…‡", age: 12312 }
];

let ageSort = student.sort((a, b) => b.age - a.age);
// console.log(ageSort);


// 8. ๊ฐ์ฒด ๋ฐฐ์—ด์—์„œ name ์†์„ฑ์ด null์ธ ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”์ง€ ํŒ๋ณ„์„ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
var student = [
    { id: 1, name: "์ดใ…‡ใ…‡" },
    { id: 2, name: null },
    { id: 3, name: "๊น€ใ…‡ใ…‡" }
];
let nullStudent = student.filter((student) => {
    return student.name !== null;
});

let nullStudent2 = student.some((student) => student.name === null);
// console.log(nullStudent); // ๊ฐ’์„ ๋ฐ˜ํ™˜
// console.log(nullStudent2); // ๋ถˆ๋ฆฌ์–ธ ๋ฐ˜ํ™˜


// 9. ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 5๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
var arr = ["banana", "kiwi", "mango", "strawberry", "lime", "orange", "plum", "cherry"];
let arrFive2 = arr.some((fruit) => fruit.length > 5);
// console.log(arrFive2); // true


// 10. kiwi ์™€ manggo ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
var arr = ["banana", "kiwi", "mango"];
arr.splice(2, 0, "apple");
// console.log(arr);
// let newFruits = arr.splice(2, 0, "apple");
// console.log(newFruits); ๋นˆ๋ฐฐ์—ด

// 11. ๋ฐฐ์—ด์— ์Œ์ˆ˜๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
var arr = [1, 5, -3, 10, 0, 8];
let arrMinus = arr.some(num => num < 0);
// console.log(arr.some(num => num < 0)); // true


// 12. ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ์Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”
var arr = [1, 5, -3, 10, 0, 8];
let allArrMinus = arr.every((allNum) => allNum < 0);
console.log(allArrMinus); // false

map(), filter()

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ map(), filter() ๋ฅผ ๋จผ์ € ์ •๋ฆฌํ•ด๋ณด์ž

  • map() : ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๊ทธ๋Œ€๋กœ! ๊ฐ€๊ณต๋งŒ ํ•  ๋•Œ! => ๋ฐฐ์—ด์˜ ๊ธธ์ด ๋™์ผํ•จ
  • filter() : ์›๋ณธ ๋ฐฐ์—ด์—์„œ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฑฐ๋ฅด๋Š” ์ž‘์—…์„ ํ•  ๋•Œ! => ๋ฐฐ์—ด์˜ ๊ธธ์ด ๋‹ฌ๋ผ์ง

์ด ๋‘ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ํฌ์ธํŠธ๋Š” { } ์ค‘๊ด„ํ˜ธ์ด๋‹ค.

arr.map((num) => num * 10);

์ด๋ ‡๊ฒŒ ์ ์—ˆ์„ ๋•Œ๋Š” return์ด ์ƒ๋žต๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

arr.map((num) => {
	return num*10;
});

ํ•˜์ง€๋งŒ ์ค‘๊ด„ํ˜ธ๋ฅผ ์ ์—ˆ์„ ๊ฒฝ์šฐ์—๋Š” return ์„ ์ž‘์„ฑํ•ด์•ผ๋งŒ undefined์ด ๋‚˜์˜ค๋Š” ์‹ค์ˆ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.
โญ๏ธ ์ฝœ๋ฐฑ ์•ˆ์—์„œ ์ค‘๊ด„ํ˜ธ๋ฅผ ์“ฐ๋ฉด ๋ฌด์กฐ๊ฑด return์„ ์จ์•ผํ•œ๋‹ค๋Š” ๊ฑธ ๋ฐ˜๋“œ์‹œ ๊ธฐ์–ตํ•˜์ž!


sort()

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋‹ค์Œ์€ sort() ์ •๋ ฌ ๋ฉ”์†Œ๋“œ์ด๋‹ค.
์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ธ๋ฐ

let sort1 = arr.sort((a, b) => a - b);
let sort2 = student.sort((a, b) => b.age - a.age);

์ฒซ๋ฒˆ์งธ ์ค„(sort1)์€ ๋งŽ์ด ์จ๋ด์„œ ์ต์ˆ™ํ–ˆ์ง€๋งŒ ์•„๋ž˜์ค„(sort2)์€ ์ด๋ฒˆ์— ์ฒ˜์Œ ์จ๋ดค๊ณ  ๋„ˆ๋ฌด ์‹ ๊ธฐํ•˜๊ณ  ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค.

let sort = student.sort((a, b) => a[key] - b[key]);

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด๋„ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ๋‹จ ์ˆซ์ž์ผ ๊ฒฝ์šฐ์—๋งŒ!! ๊ฐ€๋Šฅํ•˜๋‹ค.
sort๋ฉ”์†Œ๋“œ๋Š” ์ˆซ์ž๋ฅผ ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ '๋ฌธ์ž์—ด(String)'์„ ์ •๋ ฌํ•œ๋‹ค๋ฉด NaN์ด ์ถœ๋ ฅ๋˜๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

items.sort(function (a, b) {
  		if (a.name > b.name) {
    			return 1;
  		} else if (a.name < b.name) {
    			return -1;
  		} else {
    			return 0;
  		}
	})

// ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์“ฐ๊ธฐ
items.sort((a, b) => {
      	return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;
    })

a-b ํ•˜๋Š” ๋ฐฉ์‹์ด ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ ์–ด์ฉŒ๊ณ  ํ•œ๊ฑฐ๋‹ˆ๊นŒ ๊ทธ ๋ฐฉ์‹์„ ํ™œ์šฉํ•œ๊ฑฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


05. forEach๋กœ ๋ณ€ํ™˜ํ•ด๋ณด๊ธฐ

// ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ forEach๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ’€์–ด์ฃผ์„ธ์š”
let arr = [10, 20, 30]
let newArr = [];

arr.forEach((num, index) => {
    newArr.push(num * 10);
})
console.log(newArr);
// ๊ฒฐ๊ณผ ๊ฐ’: [100, 200, 300] ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š” 


// 5์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•˜์„ธ์š”
let arr2 = [10, 22, 33]
let newArr2 = [];

arr2.forEach(num => {
    if (num % 5 === 0) {
        newArr2.push(num);
    }
})
console.log(newArr2)
// ๊ฒฐ๊ณผ๊ฐ’ [10]

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์ฒ˜์Œ์— ์ด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ฝ˜์†”์— ๋‹ต์€ ๊ตฌํ–ˆ์ง€๋งŒ ์š”๊ตฌํ•˜๋Š” ํ˜•ํƒœ์˜ ์ถœ๋ ฅ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ undefined๊ฐ€ ๋‚˜์™”์—ˆ๋‹ค.
forEach๋Š” ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์„ ์–ป์œผ๋ ค๋ฉด ์œ„ ์ฝ”๋“œ์—์„œ์ฒ˜๋Ÿผ let newArr = []; ๊ฐ™์€ ๋นˆ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— push ํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ์‹์œผ๋กœ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด์•ผํ•œ๋‹ค.


06. ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹

// ์ฃผ์–ด์ง„ ํ•™์ƒ ๊ฐ์ฒด ๋ฐฐ์—ด์—์„œ ๊ฐ ํ•™์ƒ์˜ ํ‰๊ท  ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ ํ›„, ํ‰๊ท ์ด 80์  ์ด์ƒ์ธ ํ•™์ƒ์˜ ์ด๋ฆ„๋งŒ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
// ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹์œผ๋กœ ํ’€์–ด์ฃผ์„ธ์š”.


const students = [
    { name: "์ดใ…‡ใ…‡", scores: [80, 90] },
    { name: "๊น€ใ…‡ใ…‡", scores: [90, 95] },
    { name: "์ •ใ…‡ใ…‡", scores: [75, 70] },
];

// ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”
// ์˜ˆ์ƒ ์ถœ๋ ฅ: ["์ดใ…‡ใ…‡", "๊น€ใ…‡ใ…‡"]

์šฐ์„  ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•  ๋ฉ”์†Œ๋“œ๋ถ€ํ„ฐ ์ ์–ด๋ณด๋ฉด filter() ๋กœ ํ‰๊ท  80 ์ด์ƒ์ธ ํ•™์ƒ์„ ๊ฑฐ๋ฅด๊ณ , reduce()๋กœ ํ‰๊ท ์„ ๊ตฌํ•ด์•ผํ•œ๋‹ค.
๋ฐฐ์—ด ๋ฉ”์†Œ๋“œ์˜ ๋ฝ€์ธ๋šœ๋Š” ์„œ๋กœ ์ฒด์ด๋‹์ด ๊ฐ€๋Šฅํ•œ๊ฑด๋ฐ ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ์ญˆ์šฑ ์จ๋ณด๋Š”๊ฒŒ ๋ฏธ์…˜์ด๋‹ค.

let studentArr = students.filter((student) => {
    let avg = student.scores.reduce((prev, curr) => prev + curr, 0) / student.scores.length;
    return avg >= 80;
}).map((avgName) => avgName.name);
console.log(studentArr);

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์˜ˆ์ „์—๋„ ์ฝ”๋“œ์นดํƒ€๋ฅผ ํ’€๋ฉด์„œ reduce ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•œ ์  ์žˆ๋Š”๋ฐ ํ˜ผ์ž ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ๋ณด๋‹ค ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค๋ช…์„ ๋“ค์œผ๋ฉด์„œ ๊ณผ์ •์„ ๋ณด๋‹ˆ๊นŒ ๋„ˆ๋ฌด ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค.


reduce() ๋ฉ”์†Œ๋“œ

array.reduce((prev, curr) => prev + curr, 0)

์•ฝ๊ฐ„.. ์—„.. ๋ˆ„์ ํ•ด์„œ~ ๋”ํ•ด์ค€๋‹ค~~ ์ด๋Ÿฐ๊ฑฐ๋ผ์„œ prev,curr ๋‘ ๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
๋์— ์žˆ๋Š” 0์€ ์ดˆ๊ธฐ๊ฐ’์ธ๋ฐ ๋งค์• ์• ์•ค!!์ฒ˜์Œ์— prev์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—†์œผ๋‹ˆ๊นŒ 0์œผ๋กœ ์ •ํ•ด์ค€๊ฑฐ๋‹ค.
0์œผ๋กœ ์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๋˜‘๋˜‘ํ•œ ๋“ฏ ๋ง์ถฉ์ง€์†กํ•œ ์ปดํ“จํ„ฐ๋Š” ์—!! prev ๊ฐ’์ด ์—†์ž๋„ˆ! ์—๋Ÿฌ! ์—๋Ÿฌ! ์ด๋Ÿด๊ฑฐ๋‹ค...

function avg(arr) {
    let total = 0;
    for (let i = 0; i < arr, length; i++) {
        total += arr[i];
    }
    return total / arr.length;
}

๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ’€๋ฉด ์ด๋ ‡๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์ง€๋งŒ..! ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š”๊ฑด ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹์ด์—ˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋กœ ์•Œ์•„๋‘๊ธฐ!




์ถœ์ฒ˜

profile
์™•์ชผ๋žฉ ํƒˆ์ถœ ๋ชฉํ‘œ์ž์˜ ์ฝ”๋”ฉ ๊ณต๋ถ€๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€