gpt4 book ai didi

javascript - 为什么这个 for 循环添加的嵌套对象比预期更多?

转载 作者:行者123 更新时间:2023-12-03 00:33:45 25 4
gpt4 key购买 nike

我在这里回答了一个问题,我想出了如何使用 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] } } }

我觉得我错过了一些非常明显的东西,但我一生都无法弄清楚!预先感谢:)

最佳答案

你需要这样做

Object are assigned by reference not by value.so in order to assign value you need to create a copy of it and than assign it.

 newArray[i].child = Object.assign({},arrayOfObjects[i+1])

所以这里Object.assign将创建一个arrayOfObjects.的副本,所以现在当你分配时它将按值分配。

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 = Object.assign({},arrayOfObjects[i+1])
} else {
newArray.push(arrayOfObjects[i])
}
}

console.log(newArray)

还有另一种方法可以使用 ... 运算符来完成此操作。

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]};
} else {
newArray.push(arrayOfObjects[i])
}
}

console.log(newArray)

关于javascript - 为什么这个 for 循环添加的嵌套对象比预期更多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53742559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com