为什么索引有时会在reduce()方法中意外运行?

时间:2017-12-11 06:32:15

标签: javascript reduce

我正在尝试.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);

2 个答案:

答案 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);