链接到数组中的对象的 Javascript 对象引用
Javascript object reference linked to object in array?
如果我有一个对象:
var array = [];
var theobject = null;
array.push({song:"The Song", artist:"The Artist"}, {song:"Another Song", artist:"Another Artist"});
我做:
for(var i = 0; i < array.length; i++)
if(array[i].song == "The Song") {
theobject = array[i];
break;
}
如果我然后通过执行以下操作来更改对象:
theobject.song = "Changed Name";
我遇到了一些问题,尽管我试图仅将"theobject.song"设置为等于"更改名称",但array[0].song也设置为"更改名称"。
我想要的是"theobject.song"变成"Changed Name",而array[0].song仍然是"The Song"。
实现这一目标的最佳方法是什么?
你永远不会在循环中获得对对象的引用。尝试:
for(var i = 0; i < array.length; i++)
if(array[i].song === "The Song") {
theobject = array[i];
break;
}
这将提供对对象的引用,您将能够更改对象song
属性。
如果要使用对象的副本,则必须进行手动复制。
例如function clone(obj) {
var copy = {};
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) {
copy[attr] = obj[attr];
}
}
return copy;
}
您的循环变为:
for(var i = 0; i < array.length; i++)
if(array[i].song === "The Song") {
theobject = clone(array[i]);
break;
}
可以使用 Object.assign() 只复制其值而不引用。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
var array = [];
var theobject = null;
array.push({
song:"The Song",
artist:"The Artist"
},
{
song:"Another Song",
artist:"Another Artist"
});
for(var i = 0; i < array.length; i++)
if(array[i].song == "The Song") {
theobject = Object.assign( {}, array[i] );
break;
}
theobject.song = "Changed Name";
console.log( array );
console.log( theobject );
相关文章:
- JavaScript addEventListener添加对当前对象的引用
- 做<img>或者<画布>保存对原始(大)dataUrl对象的引用
- 获取对在 JavaScript 中运行函数的对象的引用
- 为什么当我尝试将函数绑定到自身时,“this”对象仍然引用窗口
- 在方法中失去对对象的引用
- 对象属性引用JavaScript中的其他对象属性
- 作用域,在回调中丢失对对象的引用
- 为什么可以't在创建新对象时引用旧对象
- 为什么jQuery's每个循环的函数都保存对元素对象的引用
- 如何从主框架获取对在iframe上创建的对象的引用
- javascript:在嵌套对象中定义对父对象的引用
- 将属性设置为对对象的引用
- 仅从对象名称获取对Javascript对象的引用
- 一旦附加到浏览器中的根对象,引用时根前缀是否必填
- _.find 是否返回对对象的引用?如何正确设置结果的属性
- ExtJS 4.1 :建立对对象的引用时出现问题
- 如何更改对先前作用域中的对象的引用的函数
- 作为参数传递到函数中的对象的引用是否会更改
- 存储对通讯簿应用的实例化对象的引用
- 如何在使用 outerHTML 更改内容后获取对新 DOM 对象的引用