如何在不更新另一个的情况下更新一个Javascript对象数组
How to update one Javascript object array without updating the other
我创建了一个带有一些值的对象数组。然后我创建了另一个对象数组,并用第一个对象数组初始化它。然后我在第二个数组中推送了一个值,控制台记录了这两个数组。两个数组的值相同。为什么会发生这种情况?我们如何才能阻止这种情况?
我的代码:
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);
相关文章:
- 在scala或scalajs Diode中,现有类型中的任何一种都符合“;更新一个没有'还不存在”;
- Meteor.js只更新一个参数,而不是整个集合
- 多个进度条可视地只更新一个进度条
- 将字符串转换为数组使用javascript更新一个值并返回一个字符串
- 从knockout.js中的另一个对象更新一个深度结构化的javascript对象
- JavaScript更新一个2MB的JSON文件
- 在动态表格单元格跨度中单击时更新一个权重值
- 通过应用程序缓存仅更新一个文件
- 我想更新一个.json文件,请告诉我如何去做
- 我们可以更新一个javascript数组变量,而不使用ajax重新加载页面吗?
- 根据 Angular 2 中另一个组件中单击的内容更新一个组件中的数据
- 我需要根据当前年份动态更新日期.目前在 html 中硬编码.需要更新一个单词
- 更新一个控制器中的模型,该模型被监视并位于不同的包中,并由另一个控制器使用
- 如何使用来自另一个单元格的 onChange 事件更新一个单元格
- 在其他元素的滚动事件上删除更新一个元素的scrolltop/scrollleft的延迟
- 更新一个简单的jQuery/CSS代码
- 如何在不更新另一个的情况下更新一个Javascript对象数组
- 在所有跨度上循环并更新一个失败的whit JQuery
- 你能更新一个webkitNotifications吗
- 更新一个实时的mongoose js应用程序