[AVASCRIPT]配列の繰り返し値のカウントを求めます–REDUCE()


前の記事では、reduce()のデフォルト書き込みとアキュムレータをパラメータとして使用する特性を使用して、配列内の要素を加算しました.
今回は、アキュムレータ値とinitialValueを指定できる特性を利用して、配列にどれだけの重複値があるかを求めます!
const array = ['a', 'b', 'a', 'a', 'b'];

const result = array.reduce((accu, curr) => { 
  console.log('accu',accu, 'curr', curr, accu[curr])
  accu[curr] = (accu[curr] || 0)+1; // 객체에서 curr key값을 찾아 value값이 있으면 그 value에서 1을 더하고, 없다면 0을 할당하고 거기에 1을 더해준다. 
  return accu;
}, {});

console.log('result',result); // 'result' { a: 3, b: 2 }
reduce()が配列を巡回する方法を中間で表示します.ロゴコンソールを撮ったロゴだけで外すとこうなります
console.log('accu',accu, 'curr', curr, accu[curr])

'accu' {} 'curr' 'a' undefined  // 1번
'accu' { a: 1 } 'curr' 'b' undefined // 2번
'accu' { a: 1, b: 1 } 'curr' 'a' 1 // 3번
'accu' { a: 2, b: 1 } 'curr' 'a' 2
'accu' { a: 3, b: 1 } 'curr' 'b' 1
  • initialValueが{}と指定されているため、acu(積算値)の最初の値は{}となります.次に、受信配列の最初の値のcurrは「a」であり、空のオブジェクトで「a」を検索するaccu[curr]の値はundefinedである.現在は空のオブジェクトなので、「a」キー値の値はありません.
  • 1号のオブジェクトには「a」の値がないため、0が割り当てられて+1、2番目のcurの値が「b」となる.今回は、オブジェクトにbというキー値が存在しないため、accurr値は定義されていません.
  • 2号は0+1を「b」の値として割り当てているので、累積値は{a:1,b:1}である.その後、オブジェクトにキー値がある場合は1を、ない場合は0を、1を加えます.
  • オブジェクトをInitialValueとして指定し、キー値があるかどうかを確認し、値ごとに1を足すように配列内の重複要素数を求める.👊🏻