JavaScript - 过滤嵌套数组

时间:2015-09-14 18:25:42

标签: javascript arrays

我正在尝试在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/

非常感谢在嵌套数组上找到合适结果的任何提示。

谢谢!

2 个答案:

答案 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就可以了。