我有一个名为响应的对象集合,我正在创建另一个名为的变量object
这是一个空对象并创建object.array
并将其设置为响应变量。
我想我正在创建一个新的范围。但是,如果我在里面设置年龄object.array
作为空,这将我的响应数组中的年龄设置为null
.
为什么会发生这种情况?如何创建一个不影响原始变量的重复变量?我需要保持上述变量不变。所以对象需要是一个对象,我需要创建一个数组,其中设置为响应,并且它需要位于for loop
.
这是我的代码:
function runThisLoop () {
var response = [{
name: 'Name A',
age: 2
},
{
name: 'Name B',
age: 7
}]
var object = {}
object.array = response
for (var val of object.array) {
val.age = null
}
console.log("response", response)
console.log("object.array", object.array)
}
runThisLoop()
您只是通过引用复制它们,这意味着它们位于内存中的同一位置因此,无论您尝试修改其中一个,另一个都会被修改,为了防止这种情况,您应该通过以下任一方式传递您:
- Using Array.from()
object.array = Array.from(response);
- Using slice()
object.array = response.slice();
- Using 扩展语法 (...)
object.array = [...response];
- Using JSON.parse/JSON.strigify
object.array = JSON.parse(JSON.stringify(response));
但在您的特定情况下,只有最后一个选项才能按预期工作由于您有一个嵌套数组,因此您需要元素的深层副本.
所以最终的结果应该是这样的:
function runThisLoop() {
var response = [{
name: 'Name A',
age: 2
},
{
name: 'Name B',
age: 7
}
]
var object = {}
object.array = JSON.parse(JSON.stringify(response));
for (var val of object.array) {
val.age = null
}
console.log("response", response)
console.log("object.array", object.array)
}
runThisLoop()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)