javascript - 使用 Lodash 过滤嵌套对象——得到不一致的结果

标签 javascript lodash

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

相关文章:

javascript - 当使用来自 react-router-dom 的 `Failed to execute ' 时,为什么 'History' pushState' on `Link` `

javascript - 如何将数据绑定(bind)到多选?

javascript - 在 es6 javascript 中引用 super 上下文

javascript - 是否有与 Ramda 的 'evolve' 函数等效的 lodash/fp?

javascript - 是否可以获取元素的 css?

javascript - Lodash:使用最新项目创建新数组

javascript - 如何使用有关计数的信息获取对象数组中相同数据的计数

javascript - 找出 JavaScript 对象数组中的差异和交集

javascript - Lodash:_.isBlank?

javascript - 来自 InAppBrowser 的返回变量