如果我将两个元素推入另一个array
,然后尝试删除第一个元素(单击第一个按钮),则删除第二个元素。为什么?!?
$scope.removeFromList = function(p) {
$scope.found = $.grep($scope.data2, function(e) {
return e.ID == p.ID;
});
var index = $scope.data2.indexOf($scope.found);
$scope.data2.splice(index, 1);
}
答案 0 :(得分:0)
发生这种情况是因为indexof不用于查找对象并且总是返回-1索引,这反过来会删除第一个元素,总是需要创建自己的索引
var index = myIndexOf($scope.data2,$scope.found);
function myIndexOf(arr,o) {
for (var i = 0; i < arr.length; i++) {
if (arr[i].x == o.x && arr[i].y == o.y) {
return i;
}
}
return -1;
}
答案 1 :(得分:0)
indexOf适用于数组而不适用于Object。它返回-1,因此总是取最后一个元素。
试试这个:
$scope.removeFromList = function (p) {
var index = $scope.data2.map(function(e) { return e.ID;}).indexOf(p.ID);
if(index >= 0)
$scope.data2.splice(index, 1);
}