Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更新一个Javascript对象数组而不更新另一个_Javascript_Arrays - Fatal编程技术网

如何更新一个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));