我正在尝试在javascript中过滤数组,并且在嵌套数组时会遇到困难。
目前,我能够得到的最远的是过滤平面阵列:
var ID = 3
var arr = [{ id : 1, name: "a" }, { id : 2, name: "b" }, { id : 3, name: "c" }]
var result = arr.filter(function( obj ) {return obj.id == ID;});
alert(result[0].name);
虽然如果数组看起来像这样,上面的代码不起作用:
var arr2 = [
[{ id : 1, name: "a" },{ id : 2, name: "b" }],
[{ id : 3, name: "c" },{ id : 4, name: "d" }]
]
可以找到两个例子:https://jsfiddle.net/vjt45xv4/
非常感谢在嵌套数组上找到合适结果的任何提示。
谢谢!
答案 0 :(得分:12)
Flatten数组过滤:
arr.reduce(function(a,b) { return a.concat(b); })
.filter(function(obj) { return obj.id == ID; });
答案 1 :(得分:2)
arr2.filter(function( obj ) {
obj.filter(function(d) { if(d.id == ID){
result = d;}})});
alert(result.name);
希望这就是你要找的东西。我没有在这里展平数据,而是进入嵌套数组,直到它变平(并匹配)并在那里设置结果。
arr2.forEach(function(d) {
d.forEach(
function(dd){ alert(dd.id);if(dd.id==ID){result=dd; }}
);
});
alert(result.name);
编辑:正如minitech提到的那样,只要使用forEach就可以了。