lodash过滤单个值和数组中的值

时间:2017-09-14 19:07:35

标签: javascript lodash

我有一个快速简单的功能,我需要使用lodash。

let obj = 

    {
        "AttributeID": "1",
        "KeyID": "0",
        "Value": "Undefined",
        "MetaInsertUtc": "2017-09-13T01:52:22.280"
    },
    {
        "AttributeID": "1",
        "KeyID": "1",
        "Value": "Tier 1",
        "MetaInsertUtc": "2017-09-13T01:52:22.280"
    }, {
        "AttributeID": "1",
        "KeyID": "2",
        "Value": "Tier 2",
        "MetaInsertUtc": "2017-09-13T01:52:22.280"
    }, {
        "AttributeID": "1",
        "KeyID": "3",
        "Value": "Tier 3",
        "MetaInsertUtc": "2017-09-13T01:52:22.280"
    }, {
        "AttributeID": "1",
        "KeyID": "4",
        "Value": "Tier 4",
        "MetaInsertUtc": "2017-09-13T01:52:22.280"
    }


let parent = 1;
let children = ['1', '2', '3', '4'];

let test = _.filter(obj, function(item) {
    return parseInt(item.AttributeID) === parent && parseInt(item.KeyID) IN[Children];
})

我正在尝试按特定的父ID过滤我的对象,并在这些结果中找到所有KeyID数组中children的对象。

更新

这是基于所选答案的最终结果。如果通过将这些lodash方法链接在一起有更简便的方法来实现这一点,请告诉我。

let valueObj = {
  "id" : "1",
  "name": "Joe"
},
{
  "id" : "2",
  "name": "Bob"
}
let selectedValues = _.map(valueObj, 'id');
let result = _.filter(obj, function(item) {
       return item.AttributeID === attributeID && _.includes(selectedValues, item.KeyID);
    });

2 个答案:

答案 0 :(得分:1)

使用lodash#includes方法。如果children数组包含字符串值,则不应将item.KeyID转换为数字,只需比较两个字符串:

let test = _.filter(obj, function(item) {
  let attrId = parseInt(item.AttributeID);
  return attrId === parent && _.includes(children, item.KeyID);
});

答案 1 :(得分:0)

假设您的obj实际上是一个数组。

object.filter(item => {
  return parseInt(item['AttributeID']) === parent && children.indexOf(parseInt(item['AttributeID'])) > -1;
});

您可以在常规JS中执行此简单过滤。