基于 AngularJS,在数组中根据筛选条件删除元素。

3
我该如何根据筛选条件从数组中删除元素,仅删除 'quantity' 为 0 且 'isSelected' 为 false 的索引?有什么建议吗?以下是我的代码:
```javascript array.filter((element) => element.quantity !== 0 || element.isSelected); ```
<table data-ng-repeat="st in Absorb track by $index" data-ng-cloak data-ng-init="remove(st)">                                          
    <tr>
        <td>                                                    
            <input type="radio" name="groupName" data-ng-model ="st.isSelected" data-ng-checked="(st.isSelected == true)"/>
        </td>
        <td>                                                       
            <span>{{st.ProjectedQuantityOnHand}}</span>
        </td>
        <td style="display:none" data-ng-if="st.ProjectedQuantityOnHand == 0">                                                       
            <input type="number" data-ng-model="st.ProjectedQuantityOnHand" style="display:none">
        </td>
    </tr>
</table>

JS 代码:

$scope.Absorb = [
    {"Name":"apple", ProjectedQuantityOnHand:"0", isSelected:true},
    {"Name":"mango", ProjectedQuantityOnHand:"0", isSelected:false}
    {"Name":"ball", ProjectedQuantityOnHand:"1", isSelected:false}
    {"Name":"football", ProjectedQuantityOnHand:"1", isSelected:false}
]

$scope.remove = function (item) {
     var availableqauantity = 0
     debugger
     angular.forEach($scope.StockList, function (i) {
        var FilteredProduct1 = $filter('filter')($scope.StockList, { isSelected: false, ProjectedQuantityOnHand: 0 });
        if (FilteredProduct1.length > 0) {
            availableqauantity = FilteredProduct1[0].ProjectedQuantityOnHand;
        if (availableqauantity == 0)
            $scope.StockList.splice(i,1);
        }
     });
}

你真的想从数组中删除这些项目,还是只是不想它们显示出来? - Eddi
@Eddi,你只是不想显示它们。 - Reshav
对于Angular 1.x或2,你会选择哪个?在Angular 2中,你应该在组件类中进行过滤,而不是使用过滤器管道在模板中进行过滤。 - user9903
1个回答

2
<table data-ng-repeat="st in Absorb | filter:{isSelected: '!false', ProjectedQuantityOnHand: '!0'} track by $index" data-ng-cloak> 

这将仅显示那些isSelected不为false且ProjectedQuantityOnHand不为0的项目。无需外部函数。
更新:

https://plnkr.co/edit/gPz5pKSIOxZ6odSU3TfF?p=preview

检查这个例子。在这里,我创建了一个自定义过滤器,以仅在ProjectedQuantityOnHand为0且isSelected为false时隐藏项目。
app.filter('customFilter', function() {
  return function(values) {
    var filtderResult = [];
    angular.forEach(values, function(value) {
      if (value.isSelected || value.ProjectedQuantityOnHand !== 0) {
        filtderResult.push(value);
      }
    });
    return filtderResult;
  }
});

我猜这在我的情况下不起作用。我只需要隐藏那些projectedquantity为0的元素,并且必须显示所有元素,无论是否选择都无所谓。举个例子,假设projectedquantity为0,但如果它被选中,则我必须显示该元素。 filter:{isSelected: '!false'}可以工作,但它只会显示选定的记录,对吗? - Reshav
您可以删除 isSelected: '!false' 来隐藏仅 {ProjectedQuantityOnHand: 0} 元素。或者是否有其他函数来处理 isSelected 属性? - Hardy Rust
是的,还有其他功能。我只发布那些基于@hardy概念的代码。 - Reshav
所以您需要在选择时显示项目,而不管ProjectedQuantityOnHand值是多少?是这样吗? - Hardy Rust
看一下我的对象,我必须从这个数组中隐藏只有芒果,并显示所有其他元素。 - Reshav
请在答案的更新部分中检查,它仅隐藏了芒果。我已经制作了自定义过滤器来完成此操作。您可以在其中定义任何条件。 - Hardy Rust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接