为什么索引有时会在 reduce() 方法中意外运行?
Why does index sometimes operate unexpectedly in reduce() method?
我正在试验 .reduce()
,在下面的测试代码中,我尝试将 accumulator.key[index]
设置为值 1。通过使用 console.log
,我可以看到索引正在循环正确地从 0 到 3。但是我的代码只将 accumulator.key[3]
设置为值 1。前 3 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);
您在使用此语句的每次迭代中 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);
我不确定您在数组上使用 .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);
我正在试验 .reduce()
,在下面的测试代码中,我尝试将 accumulator.key[index]
设置为值 1。通过使用 console.log
,我可以看到索引正在循环正确地从 0 到 3。但是我的代码只将 accumulator.key[3]
设置为值 1。前 3 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);
您在使用此语句的每次迭代中 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);
我不确定您在数组上使用 .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);