请检查下面的代码,我想多次将一个对象推入一个数组并设置一个指定的路径。希望有人能提供帮助。 TNX!
为了保持简单,我只删除了所有循环和静态寻址我的数组,但仍然没有成功,我不知道为什么:
错误的结果:
let myObject = {
"version": "2.0",
"worker": {
"todo": []
}
};
let myObjectArray = new Array();
myObjectArray.push(myObject);
myObjectArray.push(myObject);
myObjectArray[0]["worker"]["todo"] = "test";
console.log(myObjectArray);
- > wrong output array
正确的结果:
let myObjectArray = [
{
"version": "2.0",
"worker": {
"todo": []
}
},
{
"version": "2.0",
"worker": {
"todo": []
}
}
];
myObjectArray[0]["worker"]["todo"] = "test";
console.log(myObjectArray);
- > correct output array
答案 0 :(得分:2)
如果要推送重复项,则需要推送不同的对象实例,而不是推送对象引用。
请检查以下解决方案,它应该按照需要运行。
let myObject = {
"version": "2.0",
"worker": {
"todo": []
}
};
let myObjectArray = new Array();
myObjectArray.push(JSON.parse(JSON.stringify(myObject)));
myObjectArray.push(JSON.parse(JSON.stringify(myObject)));
myObjectArray[0]["worker"]["todo"] = "test";
console.log(myObjectArray);

答案 1 :(得分:0)
第一个例子,将同一个对象推送到数组中,因此你将在数组中复制同一个对象,修改第一个实例也会影响第二个实例。
在第二个示例中,您将在数组中创建两个单独的对象,修改第一个元素对第二个元素没有影响。
在JavaScript中,对象始终被视为引用。
答案 2 :(得分:0)
您必须在此处使用深度复制,以确保将2个对象视为单独的实例,而不是对同一对象的引用。
对于“深度”复制,请使用JSON.parse(JSON.stringify(myObject)),因此它看起来像:
myObjectArray.push(JSON.parse(JSON.stringify(myObject)));