[JavaScript] ๋ฐฐ์—ด (2)


1. sort

๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์ •๋ ฌํ•œ ํ›„ ๊ทธ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ ฌ์€ stable sort๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ •๋ ฌ ์ˆœ์„œ๋Š” ๋ฌธ์ž์—ด์˜ ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ํฌ์ธํŠธ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

[Array.prototype.sort() - JavaScriptMDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)

1): sort ๊ธฐ๋ณธ

1. sort ๊ธฐ๋ณธ

{
    const data = [10,50,20,60,80,90];
    data.sort();
    console.log(data); // ๋ฌธ์ž์—ด ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ์ •๋ ฌ
}

=>๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[ 10, 20, 50, 60, 80, 90 ]

[Done] exited with code=0 in 0.059 seconds

----------------------------------------------------------------------------

2. sort ์ž๋ฆฟ์ˆ˜ ์ •๋ ฌ

{
    const data = [100,150,120,610,80,90];
    data1.sort();
    console.log(data); // ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž๋ฆฟ์ˆ˜๋Œ€๋กœ ๋ถ„๋ฅ˜๋ฅผ ํ•˜๊ธฐ๋•Œ๋ฌธ์— ์ •๋ ฌ์ด ๋˜์ง€์•Š๋Š”๋‹ค
}

=>๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[ 100, 120, 150, 610, 80, 90 ]

[Done] exited with code=0 in 0.056 seconds

----------------------------------------------------------------------------

3. ์˜ค๋ฆ„์ฐจ์ˆœ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (1)

{
    // ์˜ค๋ฆ„ ์ฐจ์ˆœ ์ •๋ ฌ
    const data = [100,150,120,610,80,90];
    data.sort(function(a,b){
      if(a>b){
        return 1
      }else if(a<b){
        return -1
      }else{
        //a,b๊ฐ€ ๊ฐ™์•˜์„๋•Œ
        return 0
      }
    });
    console.log(data);
}

=>๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[ 80, 90, 100, 120, 150, 610 ]

[Done] exited with code=0 in 0.054 seconds

----------------------------------------------------------------------------

3-1. ์˜ค๋ฆ„์ฐจ์ˆœ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (2)

{
    const data = [100,150,120,610,80,90];
    data.sort((a,b)=>a-b); // ๊ฒฐ๊ณผ๊ฐ’์ด ํ•˜๋‚˜ ์ผ๋•Œ return ์ƒ๋žต
    console.log(data);
}

=>๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[ 80, 90, 100, 120, 150, 610 ]

[Done] exited with code=0 in 0.052 seconds

----------------------------------------------------------------------------

4. ๋‚ด๋ฆผ ์ฐจ์ˆœ ํ•ด๊ฒฐ

{
    // ๋‚ด๋ฆผ ์ฐจ์ˆœ ์ •๋ ฌ
    const data = [100,150,120,610,80,90];
    data.sort(function(a,b){
      if(a>b){
        return -1
      }else if(a<b){
        return 1
      }else{
        //a,b๊ฐ€ ๊ฐ™์•˜์„๋•Œ
        return 0
      }
    });
    console.log(data);
}

=>๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[ 610, 150, 120, 100, 90, 80 ]

[Done] exited with code=0 in 0.065 seconds

2): sort ํ™œ์šฉ


1. ๊ธฐ๋ณธ ์ถœ๋ ฅ

{
    const obj = [
        {name:'์ฒ ์ˆ˜',age:22},
        {name:'์˜ํฌ',age:25},
        {name:'ํ›ˆ์ด',age:27},
        {name:'์งฑ๊ตฌ',age:26},
        {name:'์œ ๋ฆฌ',age:21},
        {name:'๋งน๊ตฌ',age:22},
        {name:'๋ฏผ์ง€',age:25},
        {name:'์žฌ์„',age:21},
        {name:'๋‹ค๋ฏธ',age:22},
      ]

      obj.sort((a,b)=>{
        if(a.age>b.age){
          return 1;
        }else if(a.age<b.age){
          return -1;
        }else{
          return 0;
        }
      })
      console.log(obj);
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[
  { name: '์œ ๋ฆฌ', age: 21 },
  { name: '์žฌ์„', age: 21 },
  { name: '์ฒ ์ˆ˜', age: 22 },
  { name: '๋งน๊ตฌ', age: 22 },
  { name: '๋‹ค๋ฏธ', age: 22 },
  { name: '์˜ํฌ', age: 25 },
  { name: '๋ฏผ์ง€', age: 25 },
  { name: '์งฑ๊ตฌ', age: 26 },
  { name: 'ํ›ˆ์ด', age: 27 }
]

[Done] exited with code=0 in 0.068 seconds

----------------------------------------------------------------------------

2. ์‚ผํ•ญ์—ฐ์‚ฐ์œผ๋กœ ์ถœ๋ ฅ

{
    const obj = [
        {name:'์ฒ ์ˆ˜',age:22},
        {name:'์˜ํฌ',age:25},
        {name:'ํ›ˆ์ด',age:27},
        {name:'์งฑ๊ตฌ',age:26},
        {name:'์œ ๋ฆฌ',age:21},
        {name:'๋งน๊ตฌ',age:22},
        {name:'๋ฏผ์ง€',age:25},
        {name:'์žฌ์„',age:21},
        {name:'๋‹ค๋ฏธ',age:22},
      ]

      obj.sort((a,b)=>{
        //์‚ผํ•ญ์—ฐ์‚ฐ์ž ์กฐ๊ฑด ? true : false
        return a.age > b.age ? 1 : a.age < b.age ? -1 : 0
      });
      console.log(obj);
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[
  { name: '์œ ๋ฆฌ', age: 21 },
  { name: '์žฌ์„', age: 21 },
  { name: '์ฒ ์ˆ˜', age: 22 },
  { name: '๋งน๊ตฌ', age: 22 },
  { name: '๋‹ค๋ฏธ', age: 22 },
  { name: '์˜ํฌ', age: 25 },
  { name: '๋ฏผ์ง€', age: 25 },
  { name: '์งฑ๊ตฌ', age: 26 },
  { name: 'ํ›ˆ์ด', age: 27 }
]

[Done] exited with code=0 in 0.068 seconds

2. filter

์ฃผ์–ด์ง„ ํ•จ์ˆ˜์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•  ๋•Œ , ๊ฒฐ๊ณผ๊ฐ€ ๋ฐฐ์—ด๋กœ ์ถœ๋ ฅ

[Array.prototype.filter() - JavaScriptMDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)

1): filter ๊ธฐ๋ณธ


/* 3์˜ ๋ฐฐ์ˆ˜๋งŒ ์ถœ๋ ฅ */

{
    const arr = [10,30,50,20,60,40];
    const result1 = arr.filter((element,index,arr)=>{
        // element ์š”์†Œ๊ฐ’ , index ์ธ๋ฑ์Šค๋ฒˆํ˜ธ , arr ๋ฐฐ์—ด๊ฐ’
        return element % 3 ==0;
      });
      console.log(result1);
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[ 30, 60 ]
==================================

[Done] exited with code=0 in 0.089 seconds

----------------------------------------------------------------------------

/* filter,indexOf ๋ฅผ ์ด์šฉํ•ด์„œ ๊น€์ด ๋“ค์–ด๊ฐ€์žˆ๋Š” ๊ฐ’์„ ์ถœ๋ ฅ */

{
    const arr = ['๊ฐ•ํ˜ธ๋™','์œ ์žฌ์„','์ด์ˆ˜๊ทผ','๊น€ํฌ์ฒ ','์ดํšจ๋ฆฌ','๊น€๋‹ค๋ฏธ']
    const txt = '๊น€';
    //

    const result = arr.filter(item=>item.indexOf(txt)!=-1)
    console.log(result);
}

=>๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
[ '๊น€ํฌ์ฒ ', '๊น€๋‹ค๋ฏธ' ]

[Done] exited with code=0 in 0.053 seconds

2): filter ํ™œ์šฉ

/*  ์˜ํฌ ์‚ญ์ œํ•˜๊ณ  ๋‚˜๋จธ์ง€๋งŒ ์ถœ๋ ฅ */
{
    const data = [
        {name:'์ฒ ์ˆ˜',age:22,city:'์ œ์ฃผ'},
        {name:'์˜ํฌ',age:25,city:'์„œ์šธ'},
        {name:'ํ›ˆ์ด',age:27,city:'๋Œ€์ „'},
        {name:'์งฑ๊ตฌ',age:26,city:'๋Œ€๊ตฌ'},
        {name:'๋งน๊ตฌ',age:22,city:'๋ถ€์‚ฐ'},
      ];


    const data4 = data.filter((item)=>{
        return item.name != '์˜ํฌ'
      });
      for(let item of data4){
        console.log(item.name,item.age,item.city)
      };
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
์ฒ ์ˆ˜ 22 ์ œ์ฃผ
ํ›ˆ์ด 27 ๋Œ€์ „
์งฑ๊ตฌ 26 ๋Œ€๊ตฌ
๋งน๊ตฌ 22 ๋ถ€์‚ฐ

[Done] exited with code=0 in 0.056 seconds

----------------------------------------------------------------------------

/*  ์ด๋ฆ„์ด '๊ตฌ'๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅ */
{
    const data = [
        {name:'์ฒ ์ˆ˜',age:22,city:'์ œ์ฃผ'},
        {name:'์˜ํฌ',age:25,city:'์„œ์šธ'},
        {name:'ํ›ˆ์ด',age:27,city:'๋Œ€์ „'},
        {name:'์งฑ๊ตฌ',age:26,city:'๋Œ€๊ตฌ'},
        {name:'๋งน๊ตฌ',age:22,city:'๋ถ€์‚ฐ'},
    ];
    const txt = '๊ตฌ';


    // includes,forEach ํ™œ์šฉ
    const data1 = data.filter(item=>item.name.includes(txt));
    // console.log(data1);
    data1.forEach(item=>console.log(item))
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
{ name: '์งฑ๊ตฌ', age: 26, city: '๋Œ€๊ตฌ' }
{ name: '๋งน๊ตฌ', age: 22, city: '๋ถ€์‚ฐ' }

[Done] exited with code=0 in 0.064 seconds


3. find,findIndex

1). find : ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์š”์†Œ๊ฐ€ ์—†๋‹ค๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

[Array.prototype.find() - JavaScriptMDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/find)

2). findIndex: ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜๋Š”ย ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ๋Œ€ํ•œย ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜

[Array.prototype.findIndex() - JavaScriptMDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex)
/* 40์ธ ๋ฐ์ดํ„ฐ ํ•œ๊ฐœ๋งŒ ์ถœ๋ ฅ */
{
    const arr = [10,20,30,40,50];
    const arr3 = arr.find((item)=>{
        return item==40;
      })
      console.log(arr3);
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
40

[Done] exited with code=0 in 0.054 seconds

----------------------------------------------------------------------------

/* 30์ธ ์ธ๋ฑ์Šค๋ฒˆํ˜ธ ์ถœ๋ ฅ */
{
    const arr = [10,20,30,40,50];
    const arr5 =arr.findIndex(item=>item==30);
    console.log(arr5); // ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅ
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
2

[Done] exited with code=0 in 0.129 seconds


4. map

๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•˜์—ฌ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค

๋ฐ˜ํ™˜๊ฐ’: ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•œย callback์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์€ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด.

callback: ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜. ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

(1): currentValue: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ.

(2): index Optional: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค.

(3): array Optional: map()์„ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด.

(4): thisArg Optional: callback์„ ์‹คํ–‰ํ•  ๋•Œ this๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’.

[Array.prototype.map() - JavaScriptMDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
/*  map์œผ๋กœ callback ํ•จ์ˆ˜ ์ถœ๋ ฅ */
{
    const arr = [10,20,30,40,50,60];
    //map => react์—์„œ ํ™”๋ฉด์— ๋ฐ˜๋ณต(for๋ฌธ)์ฒ˜๋Ÿผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ. (์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์ƒ์„ฑ)
    const arr1 = arr.map(function(current,index,array){
        console.log('current:',current,'index:',index,'array:',array);
        return current
    })
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
current: 10 index: 0 array: [ 10, 20, 30, 40, 50, 60 ]
current: 20 index: 1 array: [ 10, 20, 30, 40, 50, 60 ]
current: 30 index: 2 array: [ 10, 20, 30, 40, 50, 60 ]
current: 40 index: 3 array: [ 10, 20, 30, 40, 50, 60 ]
current: 50 index: 4 array: [ 10, 20, 30, 40, 50, 60 ]
current: 60 index: 5 array: [ 10, 20, 30, 40, 50, 60 ]

[Done] exited with code=0 in 0.079 seconds

----------------------------------------------------------------------------

/*  map ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ */
{
    const arr = [10,20,30,40,50];
    //arr์„ map์œผ๋กœ ์ฒ˜๋ฆฌ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋„
    const arr1 = arr.map(function(item){
      return (`${item}`)
    })
    console.log(arr1.join(''))

}

=>๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
1020304050

[Done] exited with code=0 in 0.054 seconds

5. forEach

์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์‹คํ–‰

๋ฐ˜ํ™˜๊ฐ’: ย undefined

callback: ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜. ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

(1): currentValue: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ.

(2): index Optional: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค.

(3): array Optional: forEach()์„ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด.

(4): thisArg Optional: callback์„ ์‹คํ–‰ํ•  ๋•Œ this๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’.

[Array.prototype.forEach() - JavaScriptMDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
/*  forEach ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ */
{
    const arr = [0,1,2,3,4,5,6,7,8,9,10];
    arr.forEach(function (element,index,array){
      console.log(`${array}์˜ ${index}๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” ${element}`);
    });
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
0,1,2,3,4,5,6,7,8,9,10์˜ 0๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 0
0,1,2,3,4,5,6,7,8,9,10์˜ 1๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 1
0,1,2,3,4,5,6,7,8,9,10์˜ 2๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 2
0,1,2,3,4,5,6,7,8,9,10์˜ 3๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 3
0,1,2,3,4,5,6,7,8,9,10์˜ 4๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 4
0,1,2,3,4,5,6,7,8,9,10์˜ 5๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 5
0,1,2,3,4,5,6,7,8,9,10์˜ 6๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 6
0,1,2,3,4,5,6,7,8,9,10์˜ 7๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 7
0,1,2,3,4,5,6,7,8,9,10์˜ 8๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 8
0,1,2,3,4,5,6,7,8,9,10์˜ 9๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 9
0,1,2,3,4,5,6,7,8,9,10์˜ 10๋ฒˆ์งธ์˜ ์š”์†Œ๋Š” 10

[Done] exited with code=0 in 0.057 seconds

----------------------------------------------------------------------------

/*  forEach ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ */
{
    const arr = [0,1,2,3,4,5,6,7,8,9,10];
    arr.forEach((item,i)=>{
        if(i==4){
           console.log("๋ฐ˜๋ณต๋ฌธ ์ค‘๋‹จ")
          //  break
          // continue
					/* break,continue๋ฌธ์€ forEach๋ฌธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค */
      }
      console.log(`${[i]}๋ฒˆ์งธ ์š”์†Œ =>${arr[i]}`)
    })
}

=>๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
0๋ฒˆ์งธ ์š”์†Œ =>0
1๋ฒˆ์งธ ์š”์†Œ =>1
2๋ฒˆ์งธ ์š”์†Œ =>2
3๋ฒˆ์งธ ์š”์†Œ =>3
๋ฐ˜๋ณต๋ฌธ ์ค‘๋‹จ
4๋ฒˆ์งธ ์š”์†Œ =>4
5๋ฒˆ์งธ ์š”์†Œ =>5
6๋ฒˆ์งธ ์š”์†Œ =>6
7๋ฒˆ์งธ ์š”์†Œ =>7
8๋ฒˆ์งธ ์š”์†Œ =>8
9๋ฒˆ์งธ ์š”์†Œ =>9
10๋ฒˆ์งธ ์š”์†Œ =>10

[Done] exited with code=0 in 0.055 seconds

5. reduce

๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋ฆฌ๋“€์„œ(reducer) ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜.

๋ฐ˜ํ™˜ ๊ฐ’: ๋ˆ„์  ๊ณ„์‚ฐ์˜ ๊ฒฐ๊ณผ ๊ฐ’.

[Array.prototype.reduce() - JavaScriptMDN](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)

1): ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋Š” ๋„ค ๊ฐœ์˜ ์ธ์ž๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

(1): ๋ˆ„์‚ฐ๊ธฐ (acc)

(2): ํ˜„์žฌ ๊ฐ’ (cur)

(3): ํ˜„์žฌ ์ธ๋ฑ์Šค (idx)

(4): ์›๋ณธ ๋ฐฐ์—ด (src)

2): callback: ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•  ํ•จ์ˆ˜. ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

(1): accumulator:๋ˆ„์‚ฐ๊ธฐ๋Š” ์ฝœ๋ฐฑ์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ˆ„์ ํ•ฉ๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์˜ ์ด์ „ ๋ฐ˜ํ™˜๊ฐ’ ๋˜๋Š”, ์ฝœ๋ฐฑ์˜ ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ์ด๋ฉด์„œ initialValue๋ฅผ ์ œ๊ณตํ•œ ๊ฒฝ์šฐ์—๋Š” initialValue์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

(2): currentValue: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ.

(3): currentIndex Optional: ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค. initialValue๋ฅผ ์ œ๊ณตํ•œ ๊ฒฝ์šฐ 0, ์•„๋‹ˆ๋ฉด 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

(4): array Optional: reduce()๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด.

(5): initialValue Optional: callback์˜ ์ตœ์ดˆ ํ˜ธ์ถœ์—์„œ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์— ์ œ๊ณตํ•˜๋Š” ๊ฐ’. ์ดˆ๊ธฐ๊ฐ’์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋นˆ ๋ฐฐ์—ด์—์„œ ์ดˆ๊ธฐ๊ฐ’ ์—†์ด reduce()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

/*  reduce ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ */
{
    let arr = [10,20,30,40];
    let total = arr.reduce(function(acc,cur,idx,src){
        console.log(acc);
        console.log("--------------------")
        console.log(cur);
        console.log("--------------------")
        console.log(idx);
        console.log("--------------------")
        console.log(src);
        return acc+cur
      })
      console.log(`ํ•ฉ:${total}`);
}

=> ๊ฒฐ๊ณผ๊ฐ’

[Running] node "/workspaces/codespaces-blank/index.js"
accumulator: 10 ์ฝœ๋ฐฑ๋ฐ˜ํ™˜๊ฐ’
--------------------
currentValue: 20 ํ˜„์žฌ์š”์†Œ
--------------------
currentIndex: 1 ์ธ๋ฑ์Šค
--------------------
array: [ 10, 20, 30, 40 ] ๋ฐฐ์—ด
accumulator: 30 ์ฝœ๋ฐฑ๋ฐ˜ํ™˜
--------------------
currentValue: 30 ํ˜„์žฌ์š”์†Œ
--------------------
currentIndex: 2 ์ธ๋ฑ์Šค
--------------------
array: [ 10, 20, 30, 40 ] ๋ฐฐ์—ด
accumulator: 60
--------------------
currentValue: 40 ํ˜„์žฌ์š”์†Œ
--------------------
currentIndex: 3 ์ธ๋ฑ์Šค๊ฐ’
--------------------
array: [ 10, 20, 30, 40 ] ๋ฐฐ์—ด
ํ•ฉ:100

[Done] exited with code=0 in 0.061 seconds