【发布时间】:2019-05-13 12:44:19
【问题描述】:
我在这里回答了一个问题,我想出了如何使用map() 和传播(...) 运算符来解决这个问题,但我想以更命令式的方式编写它。我将向您展示 (1) 我写的内容,(2) 我预期的结果,然后 (3) 实际结果。
(1) 我写的:
const arrayOfObjects = [
{ var1: 1, var2: 2 },
{ var1: 3, var2: 4 },
{ var1: 5, var2: 6 },
{ var1: 7, var2: 8 }
]
const newArray = []
const length = arrayOfObjects.length
for (let i = 0; i < length; i++) {
if (i < (length - 1)) {
newArray.push(arrayOfObjects[i])
newArray[i].child = arrayOfObjects[i+1]
} else {
newArray.push(arrayOfObjects[i])
}
}
console.log(newArray)
(2) 所以预期的结果是这样的:
[ { var1: 1,
var2: 2,
child: { var1: 3, var2: 4 } },
{ var1: 3,
var2: 4,
child: { var1: 5, var2: 6 } },
{ var1: 5, var2: 6, child: { var1: 7, var2: 8 } },
{ var1: 7, var2: 8 } ]
(3) 但实际结果是这样的:
[ { var1: 1,
var2: 2,
child: { var1: 3, var2: 4, child: [Object] } },
{ var1: 3,
var2: 4,
child: { var1: 5, var2: 6, child: [Object] } },
{ var1: 5, var2: 6, child: { var1: 7, var2: 8 } },
{ var1: 7, var2: 8 } ]
如果您要检查新数组的第一个索引console.log(newArray[0]),您会看到它一直添加了一个子对象:
{ var1: 1,
var2: 2,
child:
{ var1: 3,
var2: 4,
child: { var1: 5, var2: 6, child: [Object] } } }
我觉得我遗漏了一些非常明显的东西,但我终其一生都无法弄清楚!在此先感谢:)
【问题讨论】:
-
这是因为
newArray[i].child = arrayOfObjects[i+1]通过引用分配。您需要创建一个新对象并分配它。如果您通过引用分配,当您更改newArray值时,arrayOfObjects值也会更改并包含子元素。 -
谢谢你的解释:)
标签: javascript arrays loops for-loop javascript-objects