JS double forEach意外结果

时间:2016-07-01 20:31:46

标签: javascript arrays foreach

我有数组:

[
  { 
    name: 'Bob',
    nestedArray: [ { param: '' }, { param: ''}, ... ]
  },
  { 
    name: 'Alise',
    nestedArray: [ { param: '' }, { param: ''}, ... ]
  },
  { 
    name: 'Rony',
    nestedArray: [ { param: '' }, { param: ''}, ... ]
  },

  ....

]

需要制作Array.nestedArray.param = Array.name

我做:

Array.forEach((arrayElement) => {
  arrayElement.nestedArray.forEach((nestedArrayElement) => {
    console.log(arrayElement.name);
    nestedArrayElement.param = arrayElement.name;
  });
});

console.log(Array);

检查结果数组我得到的参数等于所有nestedArrays中的'Rony'(最后一次迭代的arrayElement) 。但字符串

console.log(arrayElement.name);

总是返回预期值('Bob','Alise','Rony')

我也试过读取和写入索引。

请帮帮我。我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题:

var arr = [
  { name: 'Bob', nestedArray: [{ param: '' }, { param: ''}] },
  { name: 'Alice', nestedArray: [{ param: '' }, { param: ''}] },
  { name: 'Rony', nestedArray: [{ param: '' }, { param: ''}] },
];

for (var i in arr) {
    for (var j in arr[i].nestedArray) {
    arr[i].nestedArray[j].param = arr[i].name;
  }
}

编辑: 修复了@ napilnik评论的代码。至于不使用for-in,它不会改变基本想法,一旦他/她知道结果就可以由开发人员决定。