2014-09-22 72 views
0

我有一个数组存储在一个范围内,当我点击一个按钮然后重复时,我希望有任何具有相同的skillId键值从数组中删除。这是我尝试角度,删除范围内任何具有相同键值的任何东西

$scope.deleteSkill = function(skill) { 

    for (var i=0; i<$scope.pathArray.length; i++){ 

     if($scope.pathArray[i].skillId == skill){ 
      $scope.pathArray.splice(i,1); 
     } 
    }; 

}; 

的删除是在项目的重复,并传递的“功力”的是它的skillId(这工作呢罚款)。我试图通过范围数组循环,并删除具有相同skillId的任何东西。我尝试像这样循环并检查skillId =技能。我目前的逻辑似乎不起作用,如果有多个,它只会删除1个项目。任何帮助都会很棒。谢谢!

+0

为什么不过滤数组? – 2014-09-22 21:33:55

+0

我正在保存数组并将其发送回服务器,因此如果将它们从数组中移除,它将是理想的。 – ajmajmajma 2014-09-22 21:35:31

+2

构建一个新的数组,其值为'!= skill'而不是'== skill',并将该temp数组设置为pathArray – Ronnie 2014-09-22 21:49:03

回答

2

诀窍是循环从阵列到开始,因为数组的长度发生变化由于删除元素。

$scope.deleteSkill = function (skill) { 
    for (var i = $scope.pathArray.length - 1; i >= 0; i--) { 
     if ($scope.pathArray[i].skillId == skill) { 
      $scope.splice(i, 1); 
     } 
    }; 
}; 
1

去与我的评论上面,做简单的东西是比较相反

$scope.deleteSkill = function(skill) 
{ 
    var temp = []; 
    for (var i = 0; i < $scope.pathArray.length; i++) 
    { 
     if ($scope.pathArray[i].skillId != skill) temp.push(skill) //push skill or whatever the array value is 
    } 
    $scope.pathArray = temp; 
};