我已经有了解决方案,但我想了解为什么。
var returnObj = {};
//declare object
var copyObj = {};
for (var k in data.data) {
for (var i = 0; i < data.data[k].offerId.length; i++) {
if (obj.hasOwnProperty(data.data[k].offerId[i])) {
(function() {
var offerId = data.data[k].offerId[i];
var verticalId = k;
copyObj = obj[offerId];
//this does not work - overwrites similar object in array
if (returnObj[offerId] !== undefined) {
copyObj.value = 'something';
returnObj['copy'] = copyObj;
} else {
copyObj.value = 'something else';
returnObj[offerId] = copyObj;
}
})();
}
}
}
所以我的问题是,范围和变量引用是怎么回事导致我尝试在数组中为已经存在的对象创建一个新槽,以覆盖数组中已经存在的对象?我的copyObj.value
something
和returnObj['copy']
都是returnObj[offerId]
。
我已经有了一个解决方案,那就是使用angular.copy()
,但我想知道为什么更新copyObj
会影响以前存储的值?
是否有其他方法可以复制对象(而不是使用angular.copy()
)?