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]]但不是对象本身.也许有人知道解决方案吗?
我想我会过滤子列表,然后检查它的长度:
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)
| 归档时间: |
|
| 查看次数: |
2423 次 |
| 最近记录: |