Javascript数组按值传递不起作用
Javascript arrays pass by value not working
我有一个对象数组
var obj = {'name': 'John'};
var obj2 = {'name': 'Sam'};
var arr = [];
arr.push(obj);
arr.push(obj2);
现在我创建一个新的数组arr2
作为
arr2 = arr.slice();
现在如果我改变arr2[0]['name'] = 'David';
则arr1[0]['name']
也变为'David';
当arr2
对象值发生变化时,如何防止arr
对象值发生变化?
您必须克隆每个对象,而不仅仅是数组:
function cloneObject(obj) {
var result = {};
for (var k in obj) {
if (Object.prototype.hasOwnProperty.call(obj, k)) {
result[k] = obj[k];
}
}
return result;
}
var arr2 = arr.map(cloneObject);
是否有一种方法可以防止对象改变?
是的,有Object.freeze
:
arr.forEach(Object.freeze);
当您复制数组时,您只是复制数组中的值,但这些值是对对象的引用。您最终得到两个独立的数组,但引用了相同的对象。
你需要做一个深度复制,即复制每一层的所有内容:
var arr2 = JSON.parse(JSON.stringify(arr));
现在你有了一个完全独立的数组副本和它的所有内容。
相关文章:
- 在机会不起作用时设置查找值's在潜在客户资格鉴定后创建
- select中布尔值的Angularjs ng值不起作用
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 对照数组脚本检查文本框中的值不起作用
- 将值从C#asp.net传递到JAVASCRIPT不起作用
- 带有缩略图的居中幻灯片不起作用 按 iDangero.us 滑动
- 使用 ajax 传递 # 值不起作用
- 值正在传递,但警报在 javaScript 中不起作用
- 按复选框值过滤 JavaScript 不起作用
- jQuery:向不起作用的函数传递参数
- Javascript代码不起作用,并将值传递给代码的另一部分
- 在url中的querystring中传递字母数字值在flash中不起作用
- 在Windows之间传递值的JavaScript在Firefox中不起作用
- Jquery 弹出窗口将选定的复选框值传递到父窗口不起作用
- Javascript数组按值传递不起作用
- ScrollTop等于一个不起作用的值
- Javascript-Id值递增行不起作用并按Id删除行
- Android-将值从应用程序传递到网页视图页面不起作用
- 将动态值从onclick传递给另一个不起作用的javascript函数
- 我不知道为什么我的javascript不起作用.我正在动态地将值传递给标签