Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组。减少怪异行为_Javascript_Arrays - Fatal编程技术网

Javascript数组。减少怪异行为

Javascript数组。减少怪异行为,javascript,arrays,Javascript,Arrays,我有一个小代码片段: let data = [1, 2]; let newBody = {}; let newArray = data.reduce((acc, current) => { newBody.doc = current; acc.push(newBody); return acc; }, []); 结果是: newArray=[{doc:2},{doc:2}] 如果我在迭代中重新定义这个空的新手,它工作得很好。 但是,如果我在它的外部声明它获取最后一个数组元素

我有一个小代码片段:

let data = [1, 2];
let newBody = {};

let newArray = data.reduce((acc, current) => {
  newBody.doc = current;
  acc.push(newBody);
  return acc;
}, []);
结果是:

newArray=[{doc:2},{doc:2}]

如果我在迭代中重新定义这个空的新手,它工作得很好。
但是,如果我在它的外部声明它获取最后一个数组元素的值并将其应用于所有其他元素,我不知道为什么。

您使用的是意外闭包。将新手放在适当的范围内:

let data = [1, 2];

let newArray = data.reduce((acc, current) => {
  let newBody = {};
  newBody.doc = current;
  acc.push(newBody);
  return acc;
}, []);

您反复使用同一对象引用,修改一个对象,并将对同一对象的多个引用推送到一个数组中。如果我在迭代中重新定义这个空的新手,它工作得很好。此外,这是.map的工作,而不是.reduce的工作。您的代码的作用相当于:@MarkMeyer是的,正如其中一条评论所说,这是因为闭包,所以我想我必须更深入地研究闭包。ChrisG-这是我在reduce中所做工作的简化版本,因此我应该使用.map