2015-02-23 53 views
1

我有一个对象数组。我试图过滤哪些没有车?我的对象如下:如何过滤我的嵌套对象取决于一个属性?

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

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

+0

'我不想使用$ each,for循环或类似的东西'一个非常模糊的限制,因为没有它们是不可能的。即使使用'$ .filter'之类的东西,也会在内部使用循环。 – 2015-02-23 08:49:41

+0

也许可以用linq.js就可以使用。但我不知道哪条路最好? – Kle 2015-02-23 08:51:15

+0

再次,linq.js将使用循环。在没有动态长度的物体上做这件事实际上是不可能的。 – 2015-02-23 08:52:25

回答

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); 

我不知道,如果代码工作,但我敢肯定的逻辑是正确的

0

嗯,你可以使用原生的JavaScript过滤功能的阵列:

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

并使用返回的数组。 (但是,这是由$滤波器(“过滤器”)中使用的完全相同的方法)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等)