2011-12-15 97 views
8

濾波的對象(data)圍繞對象的數組包裝紙正常工作:

var arr = {"data": 
[ 
    {"name":"Alan","height":"171","weight":"66"}, 
    {"name":"Ben","height":"182","weight":"90"}, 
    {"name":"Chris","height":"163","weight":"71"} 
] 
}; 

var new_arr = $.extend(true, arr); 

new_arr.data = $.grep(new_arr.data, function(n, i){ 
    return n.weight > 70; 
}); 

alert(new_arr.data.length); // answer is 2 

然而,濾波而不對象包裝不。

var arr = [ 
    {"name":"Alan","height":"171","weight":"66"}, 
    {"name":"Ben","height":"182","weight":"90"}, 
    {"name":"Chris","height":"163","weight":"71"} 
]; 

var new_arr = $.extend(true, arr); 

new_arr = $.grep(new_arr, function(n, i){ 
    return n.weight > 70; 
}); 

alert(new_arr.length); // answer is 1 instead of 2 

我不確定問題出在哪裏。任何人都可以指出。謝謝!

回答

8

您錯誤地使用了extend。你不能用數組擴展new_arr。 Extend會將方法/道具添加到對象中,但是當它運行到數組中時,它會創建什麼方法/道具?這就是爲什麼它與對象包裝器一起工作的原因:1)擴展需要一個對象,2)'data'是一個可以添加到new_arry的屬性。

儘管如此,在你的第二個例子中,它看起來並不像你需要擴展任何東西。這是否工作?

new_arr = $.grep(arr, function(n, i){ // just use arr 
    return n.weight > 70; 
}); 
+0

我剛剛發現了原因太:)我忘了爲什麼我用延長擺在首位。看來我現在不需要它。非常感謝 :) –

0

您可以使用此爲對象越深,

var prodIds = []; 

     $.grep(this.prodOrders, function (n, i) { 

      $.grep(n.ProductionOrderLines, function (n2, i2) { 
       if (n2.ItemNo == resource) { 
        prodIds.push(n2.DocumentAbsoluteEntry); 
       } 
      }); 
     }); 
相關問題