reduce考え込む


reduceの使用方法

array.reduce(function(accumulator, currentValue, currentIndex, array) {
	
}, initialValue);
reduce関数の特徴は、各要素を巡回するたびに、関数で定義されたメソッドに基づいて返される値がアキュムレータに含まれることです.そのため、アキュムレータに初期値を設定する必要があります.
初期値を指定します.
積算値は初期値、配列の0番目のインデックスは現在値です.
初期値が指定されていません.
積算値は配列の0番目のインデックスとなり、現在の値は配列の最初のインデックスとなります.

reduce関数の使用方法


reduce関数を使用する方法は、累積値(初期値)があるかどうかによって異なります.
//배열의 모든 요소를 더한후 리턴해라.

//1. 누적값(에 초기값이) 있는지 없는지 판단한다.
let total = initValue;

let func = function(acc, cur) {
  return acc + cur;
}

if(total !== undefined) {
  //if문 안은 누적값이 있기때문에 이 안에서 작동할 반복문을 구현해본다.
  
  for(let i=0; i<arr.length; i++) {
  	//total = total + arr[i];
    total = func(total, arr[i);
  }
  return total;
} else {
  //누적값이 없을 때는 배열의 0번째 인덱스가 초기값이 된다.
  total = arr[0];
  
  for(let i=1; i<arr.length; i++) {
    total = func(total, arr[i]);
  }
  return total;
}

直接reduce関数の実装を試みる

_.reduce = function(arr, iter, initValue) {
    let total = initValue;
    
    //누적값(초기값)이 있는 경우
    if(total !== undefined) {
      /*for(let i=0; i<arr.length; i++) {
        total = iter(total, arr[i], index, arr); 
      }*/
      let newFunc = function(element, index, arr) {
    	total = iter(total, element, index, arr);    
      }
      _.each(arr, newFunc);
      return total;
    } else {
      //누적값(초기값)이 없는 경우
      //arr에서 0번째 값을 누적값에 넣어주고, 
      //현재값을 arr의 1번째를 넣어주고, 
      //반복문 안에서는 반복의 시작을 배열의 1번째부터 돌려야 된다.
      let newArr = _.slice(arr, 1);
      let newFunc = function(element, index, arr) {
   	total = iter(total, element, index, arr);
      }
      _.each(newArr, newFunc);
      return total;
    }
}