如何在不更新另一个的情况下更新一个Javascript对象数组

How to update one Javascript object array without updating the other

本文关键字:更新 一个 Javascript 数组 对象 情况下 另一个      更新时间:2023-09-26

我创建了一个带有一些值的对象数组。然后我创建了另一个对象数组,并用第一个对象数组初始化它。然后我在第二个数组中推送了一个值,控制台记录了这两个数组。两个数组的值相同。为什么会发生这种情况?我们如何才能阻止这种情况?

我的代码:

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之类的赋值通常会创建一个对象"b",该对象引用(就像指针一样)由"a"指向的相同位置。您可能会发现此链接很有用。

但是,您可以使用slice方法创建/克隆新阵列。var b = a.slice()

您可以使用

var b = JSON.parse(JSON.stringify(a));

https://stackoverflow.com/a/4591639/1623259

当您说:时,两者都指向内存中的相同值

var b = a;

因此,如果更改a,b将受到影响,反之亦然,则需要使用循环进行复制。

编辑

使用我从这篇文章中得到的这行代码

var b= a.slice(0);