angularjs移除阵列特定元素dosen'不起作用

angularjs remove array specific element dosen't work

本文关键字:dosen 不起作用 元素 阵列 angularjs      更新时间:2024-01-28

如果我将两个元素推入另一个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);
}

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);
   }

之所以会发生这种情况,是因为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;
}

Plunker