我在这里回答一个问题,我想出了如何使用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] } } }
我觉得我很想念一些东西,但是我一辈子都想不起来!在此先感谢:)
答案 0 :(得分:1)
您需要这样做
对象是通过引用而不是value.so进行分配的,以便进行分配 值,您需要为其创建一个副本并进行分配。
newArray[i].child = Object.assign({},arrayOfObjects[i+1])
因此,这里的Object.assign将创建arrayOfObjects.so的副本,因此当您进行分配时,它将按值分配。
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)