Javascript 无法访问已删除的数组对象
我们正在开发一个应用程序,可以显示员工的班次列表。如果一个移位已经通过,我们希望将其从移位数组中删除,因此不将其打印到DOM中 我们使用数组的Javascript 无法访问已删除的数组对象,javascript,arrays,angularjs,object,Javascript,Arrays,Angularjs,Object,我们正在开发一个应用程序,可以显示员工的班次列表。如果一个移位已经通过,我们希望将其从移位数组中删除,因此不将其打印到DOM中 我们使用数组的delete属性有效地删除对象。这样做,我们知道删除将使对象保持未定义状态。 然而,当它在屏幕上打印时,会出现未定义的内容(这一部分很有意义),但当我们试图用函数获取它们以解决此问题时(我们将在没有未定义的情况下复制数组),我们无法达到未定义的内容 我们怎样才能找到那些未定义的 HTML: <ul> <li ng-repeat="
delete
属性有效地删除对象。这样做,我们知道删除将使对象保持未定义状态。
然而,当它在屏幕上打印时,会出现未定义的内容(这一部分很有意义),但当我们试图用函数获取它们以解决此问题时(我们将在没有未定义的情况下复制数组),我们无法达到未定义的内容
我们怎样才能找到那些未定义的
HTML:
<ul>
<li ng-repeat="shift in CurrentUser.orderedSchedule = (schedule | orderBy:Time.getSortingDate:false)">
<p>Start time: {{Time.makeDate(shift.start)}}
{{Time.makeTime(shift.start)}}</p>
<p>end time: {{Time.makeDate(shift.end)}}
{{Time.makeTime(shift.end)}}</p>
</li>
</ul>
$scope.getShifts = function(){
$scope.schedule = $scope.CurrentUser.user.shifts; //array of objects that gets printed on screen
var now = new Date();
for (var indexOfShift in $scope.schedule){ //checks each shift
var start = $scope.schedule[indexOfShift].start; //date object, the start of the shift
if(start instanceof Date){
if(parseInt(start.getTime())-parseInt(now.getTime())<0){
//if the 'future time' has already passed now
//remove the shift
alert(start+" is in the past");
delete $scope.CurrentUser.user.shifts[indexOfShift]; //deleting shift
$scope.schedule = $scope.CurrentUser.user.shifts; //trying to update that we removed it, so we can find undefined
}
}
}
for(var indexOfShift in $scope.schedule){ //looping shifts again to look for undef
console.log($scope.schedule[indexOfShift]); //this prints all of them but the undefines don't appear
if($scope.schedule[indexOfShift].start===undefined){ //we never hit this
alert("found a blank one");
}
}
};
为什么我们不能到达未定义的地方?它们到哪里去了?for(arr中的var i)循环将不会通过未定义的项进行循环。两种解决方案:
//delete $scope.CurrentUser.user.shifts[indexOfShift];
$scope.CurrentUser.user.shifts.splice(indexOfShift, 1);
在这种情况下,“删除”只会将元素设置为未定义:
myArray=['a','b','c','d']
删除myArray[0]
myArray
结果:[未定义的“b”、“c”、“d”]
“拼接”实际上会从阵列中删除图元:
myArray=['a','b','c','d']
myArray.splice(0,2)
myArray
结果:[“c”、“d”]
有关拼接的详细信息:
例如,Mizzila:
var myFish =["angel", "clown", "drum", "mandarin", "surgeon"];
//removes 1 element from index 3
removed = myFish.splice(3, 1);
//myFish is ["angel", "clown", "drum", "surgeon"]
//removed is ["mandarin"]
在你的情况下使用这个
//delete $scope.CurrentUser.user.shifts[indexOfShift];
$scope.CurrentUser.user.shifts.splice(indexOfShift, 1);