Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript의 마지막 요소부터 거꾸로 계산하여 배열 A에서 배열 B를 가져오는 올바른 알고리즘은 무엇입니까?

<시간/>

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