在 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。對於輸入陣列中的第三個 1,輸出陣列中的元素將為 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
]

更新於:2020年8月26日

68 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.