更改在JS阵列单对象改变所有元素

问题描述:

我有71个对象的数组:更改在JS阵列单对象改变所有元素

var data = [] 

我填充此与来自同时包含该填充data的对象的静态和动态元素数据库中的数据的到来。

angular.forEach(returnData,function(value,index) { 
    if(!Array.isArray(value)) { 
    tempObject[key] = value; 
    } 
}); 
for(i = 0; i < 71; i++) { 
    data.push(tempObject); 
} 

所以,在有角的,我抓住每一个元素是从返回数据的静态,创建它的一个对象,并重复相同的对象71次。因此,该数据可能会开始了这样的事情:

[ 
    {'a': 1, 
    'b': 2, 
    'd': 7 
    }, 
    {'a': 1, 
    'b': 2, 
    'd': 7 
    } 
] 

那我走了,并抓住一切都传回作为数组的元素,并设法将它们添加到data阵列。

但是,只要我添加第一个元素,它会为数组中的每个对象设置相同的元素。

意思就是说data[0]['c'] = 11;将导致:

[ 
    {'a': 1, 
    'b': 2, 
    'c': 11, 
    'd': 7 
    }, 
    {'a': 1, 
    'b': 2, 
    'c': 11, 
    'd': 7 
    } 
] 

即使我没有碰过数组中的第二个索引。当我更新第二个索引时,它也会更新第一个索引。我确信我在这里失去了一些东西。

谢谢!

您只需将对tempObject的引用推入data阵列中的71个不同位置即可。因此,data[0],等都指向相同的对象,这就是为什么您看到数组中反映的更改。

如果您想要实际推送71个独立实例,则每次将其推入阵列时都必须克隆tempObject

上次我检查,克隆一个普通的旧JavaScript对象的最有效方法是字符串IFY,然后再解析:

data.push(JSON.parse(JSON.stringify(tempObject))); 

你自己说的:数组包含同一对象71次。不是一个对象的71份副本,而是相同的单个对象引用71次。因此,通过这些引用中的任何一个来更改该对象将反映在所有引用中。