Javascript 如何在AngularJS中从数组中删除搜索项

Javascript 如何在AngularJS中从数组中删除搜索项,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我正在创建一个angular应用程序,它有一个带有ng repeat的li和一个用于搜索out put in ng repeat的文本框,重复项有一个delete X按钮,用于从DB中删除记录。我面临的问题是如何使用splice从数组中删除搜索到的记录 转到上面的plnkr,单击任意一个x而不进行搜索,然后它将从列表中删除。但是当你搜索某个东西时,比如说ruby,那么只有ruby会出现在列表中,但是点击x,它仍然会出现。我需要使用数组操作从数组中删除搜索字段的帮助,我不想再次重新生成该数组。不要

我正在创建一个angular应用程序,它有一个带有ng repeat的li和一个用于搜索out put in ng repeat的文本框,重复项有一个delete X按钮,用于从DB中删除记录。我面临的问题是如何使用splice从数组中删除搜索到的记录


转到上面的plnkr,单击任意一个x而不进行搜索,然后它将从列表中删除。但是当你搜索某个东西时,比如说ruby,那么只有ruby会出现在列表中,但是点击x,它仍然会出现。我需要使用数组操作从数组中删除搜索字段的帮助,我不想再次重新生成该数组。

不要仅使用索引作为参数,而是通过搜索数组中的json元素来计算索引

像这样:

$scope.delete = function(project) {
  idx = $scope.projects.indexOf(project);
  $scope.projects.splice(idx, 1);
};
问题是您的idx设置为$index。这是ng repeat的索引,而不是数组的索引,因此,当筛选列表时,您现在删除的元素是错误的。 如果在删除后清除搜索框,您会注意到这一点

如果您将HTML更改为

<a href="" ng-click="delete(project)">X</a>

原因是您正在发送$index以进行删除,而不是像这样传递id

 <a href="" ng-click="delete(project.id)">X</a>  
试试这个

$scope.delete = function(idx) {
  for ( var i = 0; i < $scope.projects.length; i++){
    if ($scope.projects[i].id === idx)
     {
         $scope.projects.splice(i, 1);
     }
  }
};

我为什么要去普朗克?SO的问题应完整。总是在这里发布代码。@Mayray看看我的答案我在你的问题中添加了plunker链接,如果你不想,请回复。非常感谢,它工作正常。。因此,通过传递ID来退出解决方案的indexOF和beow解决方案,哪一个是有效的$scope.delete=functionidx{for var i=0;i<$scope.projects.length;i++{if$scope.projects[i].ID==idx{$scope.projects.splicei,1;}};非常感谢这项工作,但不确定哪项是有效的。请参阅下面的解决方案。非常感谢。。你能告诉我哪一个是通过项目的有效查找索引还是Nadhish发布的索引吗?另请参见
$scope.delete = function(idx) {
  for ( var i = 0; i < $scope.projects.length; i++){
    if ($scope.projects[i].id === idx)
     {
         $scope.projects.splice(i, 1);
     }
  }
};