首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JS过滤和搜索2个不同的对象数组

使用JS过滤和搜索2个不同的对象数组
EN

Stack Overflow用户
提问于 2017-05-10 04:33:46
回答 5查看 57关注 0票数 1

我有两个对象数组,我需要找出用另一个数组的对象过滤其中一个数组的最佳方法是什么?

第一个数组称为drinksType

代码语言:javascript
运行
复制
[
  {
    "id": "GROUP1",
    "type": "Water"
  },
  {
    "id": "GROUP2",
    "type": "Beer"
  },
  {
    "id": "GROUP3",
    "type": "Coke"
  },
  {
    "id": "GROUP4",
    "type": "Gin"
  }
]

第二个是根据drinksType过滤的drinksGroup

代码语言:javascript
运行
复制
[
  {
    "GROUP1": 1,
    "GROUP2": 0,
    "GROUP3": 0,
    "GROUP4": 0
  },
  {
    "GROUP1": 1,
    "GROUP2": 1,
    "GROUP3": 0,
    "GROUP4": 0
  },
  {
    "GROUP1": 0,
    "GROUP2": 0,
    "GROUP3": 1,
    "GROUP4": 0
  },
  {
    "GROUP1": 0,
    "GROUP2": 1,
    "GROUP3": 1,
    "GROUP4": 1
  }
]

所期望的结果如下所示

代码语言:javascript
运行
复制
[
  {
    "name": "Water"
  },
  {
    "name": "Water Beer"
  },
  {
    "name": "Coke"
  },
  {
    "name": "Beer Coke Gin"
  }
]

因此,您可以看到如果drinksGroup中的键的值为1,那么我需要过滤drinksType来获得类型。在某些情况下,可能有几个键的值为1,在这种情况下,我需要使用所有键来过滤drinksType,并连接这些类型。叹息!

到目前为止我的努力是这样的..。

代码语言:javascript
运行
复制
const dataKeys = Object.keys(drinksGroup);

drinks.name = [...dataKeys
            .filter((dataKey) => dataKey.match(/GROUP/))
            .filter((dataKey) => data[dataKey] === 1)
        ].join(' ');

这给出了结果

代码语言:javascript
运行
复制
  [
      {
        "name": "GROUP1"
      },
      {
        "name": "GROUP1 GROUP2"
      },
      {
        "name": "GROUP3"
      },
      {
        "name": "GROUP2 GROUP3 GROUP3"
      }
    ]

但我不知道从那里该做什么。你知道我该怎么做吗?我正在做的项目也可以访问lodash,如果这会更容易的话?非常感谢

EN

Stack Overflow用户

发布于 2017-05-10 04:45:01

另一种可能的解决方案。

代码语言:javascript
运行
复制
var arr = [{"id":"GROUP1","type":"Water"},{"id":"GROUP2","type":"Beer"},{"id":"GROUP3","type":"Coke"},{"id":"GROUP4","type":"Gin"}],
    arr2 = [{"GROUP1":1,"GROUP2":0,"GROUP3":0,"GROUP4":0},{"GROUP1":1,"GROUP2":1,"GROUP3":0,"GROUP4":0},{"GROUP1":0,"GROUP2":0,"GROUP3":1,"GROUP4":0},{"GROUP1":0,"GROUP2":1,"GROUP3":1,"GROUP4":1}],
    
    hash = arr2.map(v => Object.keys(v).filter(c => !!v[c])),
    res = hash.map(v => ({name: v.map(c => arr.find(b => b.id == c).type).join(', ')}));

    console.log(res);

票数 2
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43879349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档