如何过滤我的嵌套对象取决于一个属性?

时间:2015-02-23 08:47:51

标签: jquery arrays angularjs filter

我有一个对象数组。我试图过滤哪些没车?我的目标如下:

var obj = {
    personName: 'John', 
    Car: {
        Brand: 'A',         
        Age: 2 
    }
},{
    personName: 'Alice', 
    Car: {
        Brand: 'A', 
        Age: 2 
    }
},{
    personName: 'Martin', 
    Car:{}
}]

我该怎么办?我不想使用$eachfor循环或类似的东西。

2 个答案:

答案 0 :(得分:1)

使用像

这样的递归函数
var people = [{
     personName: 'John',
     Car: {
         Brand: 'A',
         Age: 2
     }
 }, {
     personName: 'Alice',
     Car: {
         Brand: 'A',
         Age: 2
     }
 }, {
     personName: 'Martin',
     Car: {}
 }]
 var count1 = people.length;
 $scope.NoCar = function (arr, count2) {

     if (count2 == 0)
         return;
     else {
         if (arr[count2 - 1].Car == {} || arr[count2 - 1].Car == null) {
             console.log("No Car");
         }
         count2--;
         $scope.NoCar(arr, count2);
     }
 }
 $scope.NoCar(people, count1);

我不确定代码是否有效,但我确定逻辑是正确的

答案 1 :(得分:0)

嗯,你可以使用本机javascript过滤器函数到数组:

$scope.noCar = obj.filter(function(v){
  return !v.hasOwnProperty('Car') || !v.Car.hasOwnProperty('Brand');
});

并使用返回的数组。 (但这是$ filter使用的确切方法('过滤器'))https://github.com/angular/angular.js/blob/master/src/ng/filter/filter.js#L155

然后和上面的代码相同:

$scope.noCar = $filter('filter')(obj, function(v){
  return !v.hasOwnProperty('Car') || !v.car.hasOwnProperty('Brand');
})

本机方法总是最有效的方法,直接在引擎上运行(V8等)