我正在尝试使用 Lodash 过滤数组。问题是,在我的主数组中,一些数组元素是对象,一些是数组中的对象。我想使用一个过滤器来处理这两种情况。当我第一次使用 var 尝试代码时,我只得到了事件编号 270188929,但是当我第二次尝试使用 var 代码时,我只得到了事件编号 370188929。是否可以编写一个带有嵌套对象定义的过滤器来处理这两者?或者我需要一个功能吗?那么,什么函数可以工作呢?
这是我的代码:
var array = [{
"category": "test",
"incidentInformation": {
"incidentNumber": "270188929",
},
"numberInformation": {
"number": "1",
"type": "moderate",
},
}, {
"category": "test2",
"incidentInformation": {
"incidentNumber": "370188929",
},
"numberInformation": [{
"number": "1",
"type": "moderate",
}, {
"number": "1",
"type": "moderate",
}]
}];
var first = _.filter(array, {
numberInformation: {
type: "moderate"
}
});
var second = _.filter(array, {
numberInformation: [{
type: "moderate"
}]
});
最佳答案
如果您想将两个条件合并到一个过滤器中,我建议使用cond()
:
_.filter(array, _.cond([
[v => v.numberInformation.type === 'moderate', _.stubTrue],
[v => _.some(v.numberInformation, { type: 'moderate' }), _.stubTrue]]
));
传递给 cond()
的对是 condition 函数,后跟 value 函数。这个想法是,条件将继续评估项目,直到其中一个返回 true,或者直到它们用完。当发现某些内容时,true
值将返回给过滤器。
通过这种方法,可以更轻松地维护逻辑,因为它是声明性的。
关于javascript - 使用 Lodash 过滤嵌套对象——得到不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43719972/