我正在尝试.reduce()
,在下面的测试代码中,我尝试将accumulator.key[index]
设置为值1.通过使用console.log
,我可以看到索引正确地从0到3.但是我的代码只将accumulator.key[3]
设置为值1.前三个accumulator.key[index]
保留为未定义。这对我来说完全是莫名其妙。我不明白为什么它不能将所有4个键都设置为1.感谢您的帮助!
"use strict";
var testArray = ['fe', 'fi', 'fo', 'fum'];
var output;
output = testArray.reduce((accumulator, currentValue, index) => {
accumulator.key = [];
console.log(index);
accumulator.key[index] = 1;
return accumulator;
}, []);
console.log(output.key);
答案 0 :(得分:2)
您在每次使用此语句accumulator.key = []
的迭代中都会为key
属性分配一个新的[]
,它会删除以前的数组引用。传递一个对象而不是一个数组,并将其上的key
属性定义为数组。
var testArray = ['fe', 'fi', 'fo', 'fum'];
var output;
output = testArray.reduce((accumulator, currentValue, index) => {
console.log(index);
accumulator.key[index] = 1;
return accumulator;
}, { key: [] });
console.log(output.key);

答案 1 :(得分:1)
我不确定你的用例是否在数组上使用.key
但是如果这是你决定的,那么就不要在每次迭代时将它初始化为数组。如果你害怕在第一次迭代中得到一个未定义的,那么使用一个回退空数组。
accumulator.key = (accumulator.key || []);
"use strict";
var testArray = ['fe', 'fi', 'fo', 'fum'];
var output;
output = testArray.reduce((accumulator, currentValue, index) => {
accumulator.key = (accumulator.key || []);
console.log(index);
accumulator.key[index] = 1;
return accumulator;
}, []);
console.log(output.key);