算法题:var a=[1,5,3,2,6,1,4],写一个方法能把数组a处理成[1,6,9,11,17,18,22]。

var a=[1,5,3,2,6,1,4],写一个方法能把数组a处理成[1,6,9,11,17,18,22]。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

在线急等!!!!

阅读 3.3k
6 个回答
function arrSum(array){
    var sum=0;
    return array.map(item=>{
        sum+=item;
        return sum;
    });
}

关于reduce的用法,有两种形式:

  1. 如果只传一个迭代函数作为参数,那么它会将数组的第一个值作为初始值,从数组的第二项开始迭代,例如:

    [1, 2, 3].reduce((v1, v2) => {
        console.log(v1, v2);
        return v1 + v2;
    });

    迭代函数只会执行两次,第一次输出:1 2,第二次输出:3 3

  2. 除了迭代函数外,我们还可以传入一个初始值,作为迭代函数的初始值,函数会从数组第一项开始迭代,例如:

    [1, 2, 3].reduce((v1, v2) => {
        console.log(v1, v2);
        return v1 + v2;
    }, 0);

    迭代函数会执行3次,第一次输出:0 1,第二次输出:1 2,第三次输出:3 3

所以本例中,最好采用第二种方式,传入初始值[]

[1,5,3,2,6,1,4].reduce((acc, value) => {
    const lastValue = acc[acc.length - 1] || 0;
    acc.push(lastValue + value);
    return acc;
}, []);

这样既不会修改原数组,也无需重复构建Array

var a=[1,5,3,2,6,1,4]
    a.reduce((total, value, index ) => {
      a[index] = total + value
      return total+value;
    },0)

我理解是 原数组a 变为 [1,6,9,11,17,18,22]

function fibonacci(arr) {
    var ret = [];
    for (var i = 0; i < arr.length; ++i) ret[i] = arr[i] + (ret[i - 1] || 0);
    return ret;
}
console.log(fibonacci(a));

a.reduce((a,b)=>[...a, a[a.length-1]+b], [0]).slice(1)

@Xeira

arr.reduce(function(tar,item, index){
    return arr[index] = tar + item;
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题