Skip to content

Latest commit

ย 

History

History
467 lines (379 loc) ยท 13.1 KB

2019-04-12-Array.md

File metadata and controls

467 lines (379 loc) ยท 13.1 KB

2019๋…„ 4์›” 12์ผ

๋ฐฐ์—ด(Array)


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” forEach(), map(), filter()๋ฅผ ์ž์œ ์ž์žฌ๋กœ ๋‹ค๋ฃฐ ์ค„ ์•Œ์•„์•ผํ•œ๋‹ค.

for ๋ฌธ ๋Œ€์‹ ์— ์ด ์„ธ ๊ฐ€์ง€๋ฅผ ์“ฐ๋ฉด์„œ ์—ฐ์Šตํ•˜์ž.

reduce() ํ•จ์ˆ˜๋„ ๊ณต๋ถ€ํ•˜์ž. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋งค์šฐ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

array.join(๊ตฌ๋ถ„์ž)

  • ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ์นœ ์ƒˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๊ตฌ๋ถ„์ž๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์‰ผํ‘œ(,)๊ฐ€ ๊ตฌ๋ถ„์ž๊ฐ€ ๋œ๋‹ค.
var array = [1, 2, 3];
array.join(); // "1,2,3"
array.join(':'); // "1:2:3"

array.concat()

  • ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉ(merge)ํ›„ ์ƒˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
var array = [1,2,3];
array = array.concat(4,5); // [1,2,3,4,5]
array.concat([6,7]); // [1,2,3,4,5,6,7]

array.push(), array.pop()

  • array.push(item): ๋ฐฐ์—ด์˜ ๋งจ ๋์— item์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • array.pop(): ๋ฐฐ์—ด์˜ ๋งจ ๋ ํ•ญ๋ชฉ์„ ์‚ญ์ œํ•œ๋‹ค.
var array = [1,2,3];
array.push(4); // 4
array; // [1,2,3,4]
array.pop(); // [4]

array.unshift(), array.shift()

  • array.unshift(item): ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— item์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • array.shift(): ๋ฐฐ์—ด์˜ ๋งจ ์•ž ํ•ญ๋ชฉ์„ ์‚ญ์ œํ•œ๋‹ค.

array.splice(์‹œ์ž‘์ , ์ง€์šธ ๊ฐœ์ˆ˜, ์ถ”๊ฐ€ํ•  ํ•ญ๋ชฉ)

  • splice๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์—๋„ ํ•ญ๋ชฉ(item)์„ ์ถ”๊ฐ€ ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
var array = [1,2,3,4];
array.splice(2, 1, 5); // 3
array; // [1,2,5,4];
  • ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€๋งŒ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์ง€์šธ ๊ฐœ์ˆ˜์— 0์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. splice(์‹œ์ž‘์ , 0, ์ถ”๊ฐ€ํ•  ํ•ญ๋ชฉ)

every

array.every(function(ํ•ญ๋ชฉ) { ์กฐ๊ฑด })

  • every: ๋ฐฐ์—ด์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์ด true๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

some

array.some(function(ํ•ญ๋ชฉ) { ์กฐ๊ฑด })

  • some: ๋ฐฐ์—ด์˜ ์ผ๋ถ€ ํ•ญ๋ชฉ์ด true๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
var array = [1, 3, 5, 7, 9];
array.every(function(i) {
  return i % 2 === 1;
}); // true
array.every(function(i) {
  return i < 9;
}); // false
array.some(function(i) {
  return i === 9;
}); // true

for ๋ฌธ์„ ๋Œ€์ฒดํ•  ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ

forEach(), map(), reduce()

forEach(), map(), reduce() ๋ฉ”์„œ๋“œ์˜ ํŠน์ง•

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ ์š”์†Œ(element)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋˜๋Š” ์ •๋ณด
    • currentValue: ๋ฐฐ์—ด์—์„œ ํ˜„์žฌ ์ž…๋ ฅ๋ฐ›๋Š” element.
    • index: ๋ฐฐ์—ด์—์„œ ํ˜„์žฌ ์ž…๋ ฅ๋ฐ›๋Š” element์˜ ์ธ๋ฑ์Šค.
    • array: forEach()๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด (๋‚˜๋จธ์ง€ ๋ฉ”์„œ๋“œ๋„ ๋™์ผ)

forEach()

array.forEach(function(ํ•ญ๋ชฉ){ ์กฐ๊ฑด })

  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ(element)์— ๋Œ€ํ•˜์—ฌ ์กฐ๊ฑด์‹์˜ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ๋‹ค.
var array1 = ['a', 'b', 'c'];

array1.forEach(function(element) {
  console.log(element);
});

// expected output: "a"
// expected output: "b"
// expected output: "c"
  • for ๋ฌธ๊ณผ forEach() ๋น„๊ต
// for loop
var arr = [3, 9, 4, 2, 7, 6];
for (var i = 0; i < arr.length; i++) {
    if (arr[i] % 2 == 0) {
        console.log(arr[i]);
    }
}
// forEach()
var arr = [3, 9, 4, 2, 7, 6];
arr.forEach(function (n) {
    if (n % 2 == 0) {
        console.log(n);
    }
});
  • for loop ๋Œ€์‹  forEach()๋ฅผ ์“ฐ๋ฉด ์ข‹์€ ์ 
    • ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง„๋‹ค.
    • forEach๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๊ฐ element ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค ๊ฐ’๊ณผ element๋ฅผ ๋ฐ›๊ธฐ์œ„ํ•œ ๋ณ€์ˆ˜ (i, arr[i]) ๊ฐ€ ํ•„์š”์—†๋‹ค.

map()

array.map(function(ํ•ญ๋ชฉ){ ์กฐ๊ฑด })

์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด์„ ๋ชจ์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.

map()์„ ์ด์šฉํ•˜๋ฉด ์›๋ณธ ๋ฐฐ์—ด์„ ์œ ์ง€ํ•œ ์ฑ„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • forEach ์™€ ์ฐจ์ด์ : 1) map์€ ๋ฐ”๋€ ์ƒˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, forEach๋Š” ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
// ๋ฐฐ์—ด์˜ ๊ฐ ํ•ญ๋ชฉ์— +1 ์„ ํ•˜๊ณ  ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ 
var array = [1,2,3];
array.map(function(x) {
  return x+1;
}); // [2,3,4]
var array = [1,2,3];
array.forEach(function(x) {
  return x+1;
}); // undefined
  • forEach ์™€ ์ฐจ์ด์ : 2) ์ฝ”๋“œ๊ฐ€ ์ง๊ด€์ ์ด๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’๋‹ค.
  • map()์€ ๋ถ€๋ชจ ์Šค์ฝ”ํ”„ ์˜์—ญ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋งŒ์œผ๋กœ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋‹ค. (์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ์—†์Œ)
  • ํ•จ์ˆ˜ ๋ฐ–์— ์žˆ๋Š” ์Šค์ฝ”ํ”„(scope)์™€ ๋ณ€์ˆ˜(variable)๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ง๊ด€์ ์ด๋‹ค.
// ๋ฌธ์ž์—ด ๋ฐฐ์—ด์—์„œ ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜
// ํ•จ์ˆ˜๋งŒ ๋ด๋„ ์–ด๋–ค ์ผ์„ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
var arr = ['foo', 'hello', 'diamond', 'A'];
var arr2 = arr.map(function (str) {
    return str.length;
});
console.log(arr2); // [3, 5, 7, 1]
// for ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ๋‚ด์—์„œ ์™ธ๋ถ€ ๋ณ€์ˆ˜ arr2๋ฅผ ์ฐธ์กฐํ•ด์•ผํ•œ๋‹ค.
// ๋ถ€๋ชจ ์Šค์ฝ”ํ”„๊นŒ์ง€ ์‹ ๊ฒฝ์จ์•ผ ํ•˜๋ฏ€๋กœ ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค.
var arr = ['foo', 'hello', 'diamond', 'A'];
var arr2 = [];
arr.forEach(function (str) {
    arr2.push(str.length);
});
console.log(arr2); // [3, 5, 7, 1]

filter()

array.filter(function(ํ•ญ๋ชฉ){ ์กฐ๊ฑด })

  • ํŠน์ • ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ(element)๋งŒ ๊ฑธ๋Ÿฌ๋‚ด ์ƒˆ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค.
// ๋ฐฐ์—ด ์•ˆ์˜ ์ง์ˆ˜๋งŒ ๋‚จ๊ธฐ๊ณ  ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜
var array = [1,2,3,4,5];
array.filter(function(x) {
  return x % 2 === 0;
}); // [2,4]
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด์€ boolean์„ ๊ฐ–๋Š”๋‹ค.
  • ๋ฆฌํ„ด์ด true์ธ ์š”์†Œ๋งŒ ๋ชจ์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
  • ์ƒ๋žตํ•˜๋ฉด ๋ฆฌํ„ด์€ undefined์ด๋ฏ€๋กœ false๊ฐ€ ๋œ๋‹ค.
  • ๋ฆฌํ„ด์ด true์ธ ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด ๋นˆ ๋ฐฐ์—ด[]์ด ๋ฐ˜ํ™˜๋œ๋‹ค.
var arr = [4, 377, 1024];
var arr2 = arr.filter(function (n) {
    return n % 5 == 0;
});
console.log(arr2); // []
  • undefined๋„ ์•„๋‹Œ ๋นˆ ๋ฐฐ์—ด[]์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค.
  • ๋ณดํ†ต ๋„๋ฉ”์ธ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ Array ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์—ฐ๊ฒฐํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ด ๋•Œ undefined์ด ์•„๋‹Œ ๋นˆ ๋ฐฐ์—ด[]์„ ๋ฐ˜ํ™˜ ํ•จ์œผ๋กœ์จ ์ค‘๊ฐ„์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š๊ณ  ๋‹ค์Œ Array ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
// ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
var arr = [4, 377, 1024]; // 5์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์—†์Œ.
var arr2 = arr.filter(function (n) {
    return n % 5 == 0;
}).map(function (n) { // filter๋กœ๋ถ€ํ„ฐ ๋นˆ ๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๋จ.
    return n * 2;
});
console.log(arr2); // []. map()์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๊ฒฐ๊ตญ ํ•œ ๋ฒˆ๋„ ํ˜ธ์ถœ๋˜์ง€ ์•Š์•˜์œผ๋‚˜ ๋ฌธ์ œ ์—†์Œ.

reduce()

array.reduce(function(์ด์ „๊ฐ’, ํ˜„์žฌ๊ฐ’){ ์กฐ๊ฑด }, ์ดˆ๊ธฐ๊ฐ’)

  • reduce() ๋ฉ”์„œ๋“œ๋Š” map(), filter()๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐฐ์—ด์˜ ์™ผ์ชฝ๋ถ€ํ„ฐ ์กฐ๊ฑด์„ ์ ์šฉํ•ด ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“ ๋‹ค.

  • ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์กฐ๊ฑด์„ ์ ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด reduceRight()๋ฅผ ์“ด๋‹ค.

1. callback ํ•จ์ˆ˜

  • previousValue: ์ด์ „ ๋งˆ์ง€๋ง‰ ์ฝœ๋ฐฑ ํ˜ธ์ถœ์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’.
  • currentValue: ๋ฐฐ์—ด ๋‚ด ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š” element.
  • currentIndex: ๋ฐฐ์—ด ๋‚ด ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š” element์˜ ์ธ๋ฑ์Šค
  • array: reduce()์— ํ˜ธ์ถœ๋˜๋Š” ๋ฐฐ์—ด

2. initialValue(์ดˆ๊ธฐ๊ฐ’): ์„ ํƒ์‚ฌํ•ญ. callback์˜ ์ฒซ ํ˜ธ์ถœ์— ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’.

  • ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์™€๋Š” ๋‹ฌ๋ฆฌ initialValue๋ผ๋Š” ๋‘ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ค‘์š”!: reduce()์˜ return์€ ๋ฐฐ์—ด(array), ๋ฐฐ์—ด์˜ element ๋˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
// ๋ฐฐ์—ด์˜ ์™ผ์ชฝ๋ถ€ํ„ฐ ๋”ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜
var arr = [1, 2, 3, 4, 5];
arr.reduce(function(prev, cur) {
  return prev + cur;
}); // 15
  • ์œ„ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์ˆœ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
ํ˜ธ์ถœ ์ˆœ์„œ pre cur return
1 1 (์ฒซ ๋ฒˆ์งธ element) 2 3 (1+2)
2 3 3 6 (3+3)
3 6 4 10 (6+4)
4 10 5 15 (10+5)
  • reduce์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž์ธ initialValue๋ฅผ ์ƒ๋žตํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— pre์˜ ์ฒซ๋ฒˆ์งธ element๋กœ 1์ด ์ „๋‹ฌ๋˜์—ˆ๋‹ค.
// ๋ฐฐ์—ด ์š”์†Œ์˜ ํ•ฉ ๊ณ„์‚ฐํ•˜๊ธฐ
var arr = [1, 2, 3, 4, 5];
var count = 0;
var sum = arr.reduce(function (pre, value) {
    count++;
    return pre + value;
}, 0); // initialValue๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค!
console.log(sum); // 15
console.log(count); // 5
  • ์œ„ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์ˆœ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
ํ˜ธ์ถœ ์ˆœ์„œ pre cur return
1 0 (initialValue) 1 1 (0+1)
2 1 2 3 (1+2)
3 3 3 6 (3+3)
4 6 4 10 (6+4)
5 10 5 15 (10+5)
  • ์œ„์— map()๊ณผ filter()๋กœ ๊ตฌํ˜„ํ•œ ์˜ˆ์ œ๋ฅผ reduce()๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
// map - ๋ฌธ์ž์—ด ๋ฐฐ์—ด์—์„œ ๋ฌธ์ž์—ด ๊ธธ์ด๋งŒ ํš๋“ํ•˜๊ธฐ
// reduce๋กœ ๊ตฌํ˜„
var arr = ['foo', 'hello', 'diamond', 'A'];
var arr2 = arr.reduce(function (pre, value) {
    pre.push(value.length);
    return pre;
}, []);
console.log(arr2); // [3, 5, 7, 1]
// filter - ์ •์ˆ˜ ๋ฐฐ์—ด์—์„œ 2์˜ ๋ฐฐ์ˆ˜์ธ ์ •์ˆ˜๋งŒ ๋ชจ์œผ๊ธฐ
// reduce๋กœ ๊ตฌํ˜„
var arr = [1,2,3,4,5];
var arr2 = arr.reduce(function (pre, value) {
    if (value % 2 == 0) {
        pre.push(value);
    }
    return pre;
}, []);
console.log(arr2); // [2,4]
  • ์œ„์˜ ์˜ˆ์ œ๋Š” reduce()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค filter()์™€ map()์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค.

  • ๋”ฐ๋ผ์„œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

  • reduce() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ์ฒด(object)์—๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

var obj = {
    apple: 500,
    grape: 2000,
    berry: 30
};
  • ์œ„ ๊ฐ์ฒด(object)์—์„œ ๊ฐ key์— ํ•ด๋‹นํ•˜๋Š” value๊ฐ’์„ ๋”ํ•˜๊ณ  ์‹ถ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ reduce()๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด(array)์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Object.keys๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ์ฒด(object)์˜ key๊ฐ’์„ ๋ฐฐ์—ด(array)๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
var obj = { 
    apple: 500, 
    grape: 2000, 
    berry: 30 }; 
var sum = Object.keys(obj).reduce(function (pre, value) {
    return pre + obj[value];
    }, 0); 
console.log(sum); // 2530
  • ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ for -in์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋” ๊ฐ„๋‹จํ•˜๋‹ค.
var obj = {
    apple: 500,
    grape: 2000,
    berry: 30
};
var sum = 0;
for (let prop in obj) {
    sum += obj[prop];
}
console.log(sum); // 2530

๊ธฐ์–ตํ•ด์•ผํ•  ๋ถ€๋ถ„

  • ๋ฐฐ์—ด์˜ ์š”์†Œ(element)๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ forEach() ์ด์™ธ์— ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•  ์ค„ ์•Œ์•„์•ผํ•œ๋‹ค.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ์ƒ์œ„ ์Šค์ฝ”ํ”„(scope)์˜ ๋ณ€์ˆ˜ ๊ฑด๋“œ๋ฆฌ๋Š” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์ž.

์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š”๊ฒŒ ์œ„ํ—˜ํ•œ ์ด์œ (์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ)

  • ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค.
var arr = [
 {x1: 1, x2: 1},
 {x1: 2, x2: 2},
 {x1: 3, x2: 3}
];
var arr2 = null;

console.log(arr2);
/**
1. arr์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์–ด์•ผ ํ•œ๋‹ค.
2. arr2๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
[
 {x1: 1, x2: 1, result: 1},
 {x1: 2, x2: 2, result: 4},
 {x1: 3, x2: 3, result: 9}
]
*/
  • ์œ„์™€ ๊ฐ™์ด arr2์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.
arr2 = arr.map(function (obj) {
    obj.result = obj.x1 * obj.x2;
    return obj;
});
console.log(arr);
/**
1. arr
[
  {x1: 1, x2: 1, result: 1},
  {x1: 2, x2: 2, result: 4},
  {x1: 3, x2: 3, result: 9}
]
*/
console.log(arr2);
/**
2. arr2
[
  {x1: 1, x2: 1, result: 1},
  {x1: 2, x2: 2, result: 4},
  {x1: 3, x2: 3, result: 9}
]
*/
  • ์œ„์˜ ๊ฒฝ์šฐ arr๊ณผ arr2๊ฐ€ ๋™์‹œ์— ๋ณ€๊ฒฝ ๋˜์—ˆ๋‹ค.
  • ์ฆ‰ ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค.
var arr = [
  {x1: 1, x2: 1},
  {x1: 2, x2: 2},
  {x1: 3, x2: 3}
];
var arr2 = null;

arr2 = arr.map(function (obj) {
    return {
        x1: obj.x1,
        x2: obj.x2,
        result: obj.x1 * obj.x2
    };
});
console.log(arr);
/**
1. arr
[
  {x1: 1, x2: 1},
  {x1: 2, x2: 2},
  {x1: 3, x2: 3}
]
*/
console.log(arr2);
/**
2. arr2
[
  {x1: 1, x2: 1, result: 1},
  {x1: 2, x2: 2, result: 4},
  {x1: 3, x2: 3, result: 9}
]
*/
  • ์œ„์˜ ๊ฒฝ์šฐ ๋ถ€๋ชจ ์Šค์ฝ”ํ”„ ๋ณ€์ˆ˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์—†์ด ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ Array, Function, Object๋Š” call by reference๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์—๋„ ๋ฐ˜์˜๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์ž์ฒด ์Šค์ฝ”ํ”„ ์˜์—ญ์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์ž

Reference