Javascript数组包含相同对象的倍数当我更新索引0处的对象时,它会自动更新索引1处的对象吗?
您可以看到要插入的对象中的ruleCounter属性为1 在数组中插入后,我们可以看到ruleCounter属性的值为1 然后我尝试插入同一个对象,但这次ruleCounter的值为2,但神奇的是,在数组中,您可以看到数组中两个对象的ruleCounter的值都变为2 请说明为什么数组不同索引中的ruleCounter值会自动更新Javascript数组包含相同对象的倍数当我更新索引0处的对象时,它会自动更新索引1处的对象吗?,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,您可以看到要插入的对象中的ruleCounter属性为1 在数组中插入后,我们可以看到ruleCounter属性的值为1 然后我尝试插入同一个对象,但这次ruleCounter的值为2,但神奇的是,在数组中,您可以看到数组中两个对象的ruleCounter的值都变为2 请说明为什么数组不同索引中的ruleCounter值会自动更新 var droppedObjects = []; //this array will contain the list of rules dropped on the
var droppedObjects = []; //this array will contain the list of rules dropped on the drop zone area.
$scope.onDropComplete1 = function(data, evt) {
ruleCounter++;
data.ruleCounter= ruleCounter;
console.log(data);
//var index = $scope.droppedObjects.indexOf(data);
if (data !== null) {
droppedObjects.push(data); //droping data into the array when drag and drop is complete
console.log(droppedObjects);
} else {
//console.log($scope.droppedObjects1);
}
};
在javascript中,复杂对象通过引用传递。这意味着,如果您有:
var objectA = {/* your properties */};
var objectB = objectA;
两个变量都包含对同一对象的引用。因此,如果在使用这些变量中的任何一个时更改属性,则同时更改另一个变量中的值。
如果要保持不同的状态,则需要创建对象的副本
var objectA = {/* your properties */};
var objectB = new Object(objectA); // or Object.create(objectA)
现在两者都是不同的对象,您可以单独更改它们的属性 请提供您的代码。这张截图并不能说只是提供了你的代码。您的代码中可能存在一些错误。需要在推送之前克隆对象。您正在推送对象,但未克隆对象。它将保留referencePossible replicate:,特别注意我答案末尾的隐喻:P