在 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 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告