在javascript中过滤数组对象中的数组

kul*_*rim 2 javascript functional-programming filter ecmascript-6

我有一个对象数组.数组中的每个对象都有一个数组.我想过滤数组,父数组和嵌套数组.例如,我有一个像这样的数组:

[{list:[1,2]},{list:[1,2,3]},{list:[1,2,3,4]}]
Run Code Online (Sandbox Code Playgroud)

当我应用filter时,它返回其中列表元素的值大于2的对象,并且嵌套列表本身也会被过滤.它应该回来

[{list:[3]},{list:[3,4]}]
Run Code Online (Sandbox Code Playgroud)

不返回Obj1,因为其中的列表没有任何大于2的值,仅对于Obj2列表:[3]返回,仅对于Obj3列表:[3,4]返回

是否有可能在不改变原始列表的情况下实现?

以下代码过滤具有大于2的元素的对象

parent
  .filter(obj => obj.list.some(el => el > 2))
Run Code Online (Sandbox Code Playgroud)

接下来我该怎么办?如果我为嵌套数组应用过滤器

...
  .filter(obj => obj.list.filter(el => el > 2))
Run Code Online (Sandbox Code Playgroud)

然后结果我得到[[3],[3,4]]但不是对象本身.也许有人知道解决方案吗?

T.J*_*der 5

我想我会过滤子列表,然后检查它的长度:

var parent = [{list:[1,2]},{list:[1,2,3]},{list:[1,2,3,4]}];

parent = parent
  .filter(obj => {
    obj.list = obj.list.filter(el => el > 2);
    return obj.list.length > 0; // Technically just `return obj.list.length;` would work; I prefer the clarity of the comparison
  });
console.log(parent);
Run Code Online (Sandbox Code Playgroud)

是的,上述内容可以更简洁地完成; 我认为清晰度受到影响,但这是一个判断力:

var parent = [{list:[1,2]},{list:[1,2,3]},{list:[1,2,3,4]}];

parent = parent.filter(obj => (obj.list = obj.list.filter(el => el > 2)).length);
console.log(parent);
Run Code Online (Sandbox Code Playgroud)