在javascript中推送多维数组

时间:2017-12-04 08:08:43

标签: javascript arrays object multidimensional-array

请检查下面的代码,我想多次将一个对象推入一个数组并设置一个指定的路径。希望有人能提供帮助。 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

3 个答案:

答案 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)));