作为练习,我尝试将地图示例转换为使用reduce:
const numbers = [1, 2, 3, 4];
numbers.map(function(a,b) {
return a+b;
});
// [1, 3, 5, 7]
我尝试使用reduce的相同示例:
numbers.reduce(
(sum, elem) => {
sum.push(elem + elem); // how can one add the index of array to the number instead of doubling it?
return sum;
}, []);
// [2, 4, 6, 8], instead I want: [1, 3, 5, 7]
答案 0 :(得分:5)
您的结果是reduce 。传递第三个参数,即索引
const numbers = [1, 2, 3, 4];
var arr = numbers.reduce(
(sum, elem, index) => {
sum.push(elem + index);
return sum;
}, []);
console.log(arr);

<强>但是强>
您的map
功能只能意外地工作:)。
map
函数接受的参数不是2个兄弟项目,而是项目及其索引。
见这里。如果您更改前一个项目,您将获得其他行为。在您的逻辑中,最后一项必须是11
,如果它接受2个兄弟项目,但它仍然是7
,因为它接受该项目及其索引。
更改数据的示例。
1 -> 1 + 0 (index) = 1
2 -> 2 + 1 (index) = 3
3 -> 3 + 2 (index) = 5
4 -> 4 + 3 (index) = 7
const numbers = [1, 2, 7, 4];
var arr = numbers.map(function(a,b) {
return a+b;
});
console.log(arr);
&#13;
<强>输出强>
1 -> 1 + 0 (index) = 1
2 -> 2 + 1 (index) = 3
7 -> 7 + 2 (index) = 9
4 -> 4 + 3 (index) = 7
reduce
函数接受它的基本形式两个参数,数组的项和上一次迭代的返回值。
所以我认为你不太了解这些功能。
中阅读更多内容答案 1 :(得分:1)
您可以添加前一项,并检查真实性和实际项目。返回具有连接值的数组。
var numbers = [1, 2, 3, 4],
result = numbers.reduce((r, a, i, aa) => r.concat((aa[i - 1] || 0) + a), []);
console.log(result);
&#13;