다음 이진 배열(배열 A)을 고려하십시오. -
const arr = [1,0,1,1,1,1,0,1,1];
이 배열이 함수(예:sumRight())를 통해 전달되면 다음 출력 배열(배열 B) -
이 생성됩니다.const output = [1,0,4,3,2,1,0,2,1];
기능 이해
배열 arr의 요소는 0 또는 1일 수 있습니다. 이 함수는 배열 arr의 마지막 요소부터 거꾸로 계산합니다. 배열 arr에 연속 1이 있으면 출력 배열의 해당 요소는 1이지만 배열 arr에서 두 번째 연속 1의 경우 , 그것은 2가 될 것입니다. 세 번째 입력 배열의 경우 출력 배열의 요소는 3이지만 배열 arr의 0의 경우 출력 배열에서도 0이 됩니다.
따라서 Array.prototype.reduceRight() 메서드를 사용하여 이 함수의 코드를 작성해 보겠습니다. 이 메서드는 일반 reduce 메서드와 동일한 작업을 수행하며 왼쪽이 아닌 오른쪽에서 시작합니다. -
예시
const arr = [1,0,1,1,1,1,0,1,1]; const sumRight = arr => { return arr.reduceRight((acc, val) => { const { prev, res } = acc; if(val === 0){ return { prev: 0, res: res.concat(0) }; }; return { res: res.concat(val+prev), prev: prev+1 }; }, { prev: 0, res: [] }).res.reverse(); }; console.log(sumRight(arr));
출력
콘솔의 출력은 -
[ 1, 0, 4, 3, 2, 1, 0, 2, 1 ]