2011-12-15 64 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); 
       } 
      }); 
     }); 
相关问题