使用没有对象包装器的 Jquery $.grep 过滤对象数组
Posted
技术标签:
【中文标题】使用没有对象包装器的 Jquery $.grep 过滤对象数组【英文标题】:Filtering an Array of Objects using Jquery $.grep without an Object Wrapper 【发布时间】:2012-01-21 05:02:36 【问题描述】:过滤适用于环绕对象数组的对象 (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
我不确定问题出在哪里。谁能指出。谢谢!
【问题讨论】:
【参考方案1】:您错误地使用了extend。您不能使用数组扩展 new_arr。 Extend 会将方法/道具添加到对象,但是当它运行到您的数组时会创建哪些方法/道具?这就是它与对象包装器一起使用的原因:1) extend 需要一个对象,2) 'data' 是一个可以添加到 new_arry 的属性。
尽管在您的第二个示例中,您似乎不需要扩展任何内容。这行得通吗?
new_arr = $.grep(arr, function(n, i) // just use arr
return n.weight > 70;
);
【讨论】:
我也刚刚找到原因:) 我忘记了为什么我首先使用扩展。看来我现在不需要了。非常感谢:)【参考方案2】:您可以将它用于更深的对象,
var prodIds = [];
$.grep(this.prodOrders, function (n, i)
$.grep(n.ProductionOrderLines, function (n2, i2)
if (n2.ItemNo == resource)
prodIds.push(n2.DocumentAbsoluteEntry);
);
);
【讨论】:
以上是关于使用没有对象包装器的 Jquery $.grep 过滤对象数组的主要内容,如果未能解决你的问题,请参考以下文章
Jquery 循环 - 在不破坏缩略图分页器的情况下将图像包装在 div 标签中
如何将 @FetchRequest 属性包装器的新 nsPredicate 动态属性与传递给 View 的对象一起使用