根据Angular JS中的数据过滤对象

时间:2018-11-15 07:42:16

标签: javascript arrays angularjs json

我有一个像这样的数据对象:

$scope.data =  [
      {
        "name": "1001",
        "queue": [
          {
            "number": "111",
          }
        ]
      },
      {
        "name": "1002",
        "queue": [

        ]
      },
      {
        "name": "1008",
        "queue": [
          {
            "number": "222",
          }
        ]
      }]

我正在使用angular js。 我首先声明了3个数组:

$scope.a = [];
$scope.b = [];
$scope.c = [];

我想要的期望输出:

如果我做console.log($scope.a);,则输出应为:

{
    "name": "1001",
    "queue": [
      {
        "number": "111",
      }
    ]
  }

如果我做console.log($scope.b);,则输出应为:

{
    "name": "1008",
    "queue": [
      {
        "number": "222",
      }
    ]
  }

如果我做console.log($scope.c);,则输出应为:

{
    "name": "1002",
    "queue": [

    ]
  }

我想遍历数据并将队列编号为111的对象推入$scope.a,将队列编号为222的对象推入$scope.b并将队列数组为空的对象推入$scope.c。我无法确定如何通过检查队列数组中的值来过滤此对象。如何在AngularJS中做到这一点?

2 个答案:

答案 0 :(得分:2)

@Navin解决此问题非常简单。只需遍历对象数组即可检查每个对象内的队列号。当遇到正确的匹配项时,请插入相应的数组。

我在下面附上了工作片段。

var data = [{
    "name": "1001",
    "queue": [{
      "number": "111",
    }]
  },
  {
    "name": "1002",
    "queue": [

    ]
  },
  {
    "name": "1008",
    "queue": [{
      "number": "222",
    }]
  }
];
var a = [];
var b = [];
var c = [];
for (i = 0; i < data.length; i++) {
  if (data[i].queue.length != 0) {
    for (j = 0; j < data[i].queue.length; j++) {
      if (data[i].queue[j].number == 111) {

        a.push(data[i]);
      } else if (data[i].queue[j].number == 222) {
        b.push(data[i]);
      }
    }
  } else {
    c.push(data[i]);
  }
}
a = JSON.stringify(a);
b = JSON.stringify(b);
c = JSON.stringify(c);
console.log(a + "\n" + b + "\n" + c);

答案 1 :(得分:0)

通过for循环进行操作,因为$scope.data是对象数组 例如

for(i=0;i<=$scope.data.length ;i++){
   if($scope.data[i].queue.length != 0){
       for(j=0;j<=$scope.data[i].queue.length;j++){
         if($scope.data[i].queue[j].number == 111){
               $scope.a.push =$scope.data[i]
           }else if($scope.data[i].queue[j].number == 222){
                      $scope.b.push =$scope.data[i]    
                   }
        }
    }else{
             $scope.c.push = $scope.data[i]
           }
 }

希望对您有所帮助。