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;
                    }
                })();
            }
         }
     }