다음 이진 배열(배열 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 ]