2015-02-23 54 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等)