Javascript变量复制和数组中的数据被覆盖
我已经有了一个解决方案,但我想了解原因Javascript变量复制和数组中的数据被覆盖,javascript,angularjs,scope,Javascript,Angularjs,Scope,我已经有了一个解决方案,但我想了解原因 var returnObj={}; //声明对象 var copyObj={}; for(data.data中的var k){ 对于(var i=0;i
var returnObj={};
//声明对象
var copyObj={};
for(data.data中的var k){
对于(var i=0;i
所以我的问题是,作用域和变量引用发生了什么,导致我试图在数组中为已经存在的对象创建一个新槽,以覆盖数组中已经存在的对象?我的copyObj.value
将是returnObj['copy']
和returnObj[offerId]
中的something
我已经有了一个解决方案,那就是使用angular.copy()
,但我想知道为什么更新copyObj
会影响以前存储的值
是否有其他方法复制对象(而不是使用
angular.copy()
)?发生这种情况的原因是因为两个变量引用相同的对象。您需要创建一个新对象,并将原始对象的所有属性复制到新对象;copyObj=obj[offerId]
在循环中,它仍然不适用于我。这是因为我没有将每个属性复制到新的copyObj
?javascript是否需要手动复制对象中的每个项目,而不是自动复制?是的,确实如此。您必须使用var copyObj={};copyObj.someProp=obj[offerId].someProp;copyObj.otherProp=obj[offerId].otherProp代码>等。只需使用angular.copy()
:)就可以轻松得多您可以像这样循环对象的属性:for(obj[offerId]中的var prop){
这很有帮助,谢谢。我如何将注释提升为答案?
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;
}
})();
}
}
}