如何更新一个Javascript对象数组而不更新另一个
我用一些值创建了一个对象数组。然后我创建了另一个对象数组,并用第一个对象数组初始化它。然后我在第二个数组中输入了一个值,控制台记录了这两个数组。两个数组的值相同。为什么会发生这种情况?我们如何才能阻止这种情况 我的代码:如何更新一个Javascript对象数组而不更新另一个,javascript,arrays,Javascript,Arrays,我用一些值创建了一个对象数组。然后我创建了另一个对象数组,并用第一个对象数组初始化它。然后我在第二个数组中输入了一个值,控制台记录了这两个数组。两个数组的值相同。为什么会发生这种情况?我们如何才能阻止这种情况 我的代码: var a = { "filters": [] }; // 1st object array var keyValue = {}; // pushed 2 values in "a" array keyValue["abc"] = "123"; a.filters.push(k
var a = { "filters": [] }; // 1st object array
var keyValue = {};
// pushed 2 values in "a" array
keyValue["abc"] = "123";
a.filters.push(keyValue);
keyValue["def"] = "456";
a.filters.push(keyValue);
var b = a; // created another object array & initialized it with "a" array
var keyValue1 = {};
// pushed 1 value in "b" array
keyValue1["ghi"] = "789";
b.filters.push(keyValue1);
console.log(a);
console.log(b);
这将为a和b打印相同的值。如何在不更新第一个数组的情况下将值推入第二个数组?当您说:
var b = a;
因此,如果更改a,b将受到影响,反之亦然,则需要使用循环进行复制
编辑
使用我从中获得的这行代码
对象的赋值(如
var b=a
)创建一个对象“b”,该对象通常引用(就像指针一样)由“a”指向的相同位置。你会发现这很有帮助
但是,您可以使用slice方法创建/克隆新阵列var b=a.slice()
您可以使用
var b = JSON.parse(JSON.stringify(a));
这与对象克隆有关,请尝试搜索。这篇文章可能还与解释如何处理对象以及如何在javascript中优雅地复制对象有关-如果“b”被更新,它不会更新“a”数组吗?不,它不会更新,因为“b”是内存中的新对象。如果“b”被更新,切片方法不会更新“a”数组吗更新。a是一个对象,而不是数组。因此,您不能使用
切片。不。。有了这个b将是一个新的数组,与a没有任何关联。你能分享关于如何将“a”数组克隆到“b”的每个代码吗
var b = JSON.parse(JSON.stringify(a));