在Javascript中推送各种对象,但未正确保存
我在一个数组中推送不同的对象在Javascript中推送各种对象,但未正确保存,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我在一个数组中推送不同的对象 $scope.itemsPending = []; while(bonos.length > 0){ if($scope.itemsPending.length > 0){ console.log($scope.itemsPending); } bono = bonos.shift(); if(bono.is_highlighted == false){ aux.push(bono); maximo
$scope.itemsPending = [];
while(bonos.length > 0){
if($scope.itemsPending.length > 0){
console.log($scope.itemsPending);
}
bono = bonos.shift();
if(bono.is_highlighted == false){
aux.push(bono);
maximo++;
}else{
if(maximo + 2 < 4){
aux.push(bono);
maximo += 2;
}else{
$scope.itemsPending.push(bono);
}
}
$scope.itemExpensing=[];
while(bonos.length>0){
如果($scope.itempending.length>0){
log($scope.itempowing);
}
bono=bonos.shift();
if(bono.is_突出显示==false){
辅助推力(波诺);
maximo++;
}否则{
如果(最大值+2<4){
辅助推力(波诺);
maximo+=2;
}否则{
$scope.itempowing.push(bono);
}
}
}
但是当我在dev控制台中显示它时,我有一个或两个“对象”,如果我打开这个项目,我有三个
发生了什么事
编辑
我的博诺价值观是这样的
Chrome的控制台(无论好坏)“记录”对对象的引用,当您通过单击箭头检查其内容时,它显示该对象的当前值。这意味着在循环中修改数组并在每次迭代中记录它可能会产生意外的结果
这是一个简单的例子来说明这个问题。您应该看到数组被记录了三次,分别是[Object]
,[Object,Object]
,[Object,Object,Object]
,但“展开”这些日志中的每一个都将访问数组的当前内容,并在所有情况下向您显示3个元素
要可靠地记录对对象的更改,请记录基元值,而不是对象或数组。例如,数组的长度,或数组的序列化版本
还考虑,在替代方案中(为了显示对象在记录时的状态),浏览器需要克隆并保留所有记录的对象。这会导致它很快耗尽内存。
bonos的初始值是什么?它是一个在工厂中定义的对象,就像在OOP中定义的对象,具有一些属性。您可以将这些值放入问题中吗?如果没有这些值,就无法对其进行调试,以了解预期的输出和即将出现的输出