var a=[1,5,3,2,6,1,4],写一个方法能把数组a处理成[1,6,9,11,17,18,22]。
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
// 请把代码文本粘贴到下方(请勿用图片代替代码)
关于reduce的用法,有两种形式:
如果只传一个迭代函数作为参数,那么它会将数组的第一个值作为初始值,从数组的第二项开始迭代,例如:
[1, 2, 3].reduce((v1, v2) => {
console.log(v1, v2);
return v1 + v2;
});
迭代函数只会执行两次,第一次输出:1 2
,第二次输出:3 3
除了迭代函数外,我们还可以传入一个初始值,作为迭代函数的初始值,函数会从数组第一项开始迭代,例如:
[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));
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答919 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决