首页 > 解决方案 > 当对象分配了多个 json 对象时无法过滤

问题描述

我的角度控制器中有一个如下所示的对象。

$scope.updatedList = [
  [
    {
      "sId":100,
      "s1":12,
      "s2":1,
      "s3":3,
      "spread":"21x",
      "owner":"Michael",
      "labels":"deffered incomplete"
    }
  ],
  [
    {
      "sId":3432,
      "s1":1,
      "s2":10,
      "s3":20,
      "spread":"34",
      "owner":"Taillor",
      "labels":"complete"
    },
    {
      "sId":4000,
      "s1":8,
      "s2":2,
      "s3":3,
      "spread":"332",
      "owner":"Shan",
      "labels":"complete deffered"
    }
  ],
  [],
  []
];

我正在尝试从 JSON 对象($scope.updatedList)中过滤列表。下面是 js 代码,如果属性标签有 defered 一词,我试图仅显示来自 json 对象的元素。

演示:https ://plnkr.co/edit/37bnDR1fkNXYBcBP6vEW?p=preview

$scope.showList = function(){
    console.log("showList  " + JSON.stringify($scope.updatedList));
    $scope.defferedList = $scope.updatedList.filter(function(obj) {
        console.log(obj.labels && obj.labels.includes('deffered'));
        return obj.labels && obj.labels.includes('deffered');
    });
};

PS:$scope.updatedList有多个用逗号分隔的json对象定义为一个对象。

--EDIT--- 预期输出:

我想从不包含“defered”一词$scope.updatedList的属性“ ”中删除元素。lables

$scope.defferedList = [[{"sId":100,"s1":12,"s2":1,"s3":3,"spread":"21x","owner":"Michael","labels":"deffered incomplete"}],[{"sId":4000,"s1":8,"s2":2,"s3":3,"spread":"332","owner":"Shan","labels":"complete deffered"}],[],[]];

在 $scope.deferedList 中,我删除了 $scope.updatedList 的标签属性中没有“defered”一词的元素。

标签: angularjsjsonangularjs-filter

解决方案


可能有一种更优雅的方式来执行此操作,但这会将您的预期输出放入$scope.defferedList属性中:

$scope.showList = function(){
    $scope.defferedList = [];

    $scope.updatedList.forEach(function(item) {
        $scope.defferedList.push(
            item.filter(function(subItem) {
                return subItem.labels.includes('deffered');
            })
        );
    });
};

推荐阅读