find当我的条件涉及嵌套数组时,我没有看到对象的方法.
var modules = [{
name: 'Module1',
submodules: [{
name: 'Submodule1',
id: 1
}, {
name: 'Submodule2',
id: 2
}
]
}, {
name: 'Module2',
submodules: [{
name: 'Submodule1',
id: 3
}, {
name: 'Submodule2',
id: 4
}
]
}
];
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它submodules是一个数组,而不是一个对象.是否有任何速记可以使这项工作?我试图避免手动迭代数组.
_.where(modules, {submodules:{id:3}});
Run Code Online (Sandbox Code Playgroud)
mar*_*oss 64
Lodash允许您过滤嵌套数据(包括数组),如下所示:
_.filter(modules, { submodules: [ { id: 2 } ]});
Ada*_*uch 16
这是我想出的:
_.find(modules, _.flow(
_.property('submodules'),
_.partialRight(_.some, { id: 2 })
));
// ? { name: 'Module1', ... }
Run Code Online (Sandbox Code Playgroud)
使用flow(),您可以构建一个可以满足您需要的回调函数.调用时,数据流经每个函数.你想要的第一件事是submodules属性,你可以使用property()函数得到它.
然后将子模块数组输入some(),如果它包含您之后的子模块,则返回true,在本例中为ID 2.
更换find()用filter(),如果你正在寻找多个模块,而不只是第一个发现的.