如何在数组中找到具有相同键值的对象?

Posted

技术标签:

【中文标题】如何在数组中找到具有相同键值的对象?【英文标题】:How can I find objects with same keys values in array? 【发布时间】:2022-01-11 14:50:43 【问题描述】:

我有一个如下所示的对象数组:

  const arr = [
     type: 'type', fields: ['field1'] ,
     type: 'type2' ,
     type: 'type', fields: ['field2'] ,
  ]

并且我需要找到具有相同类型的对象来合并其中的字段键,如下所示:

  const arr = [
     type: 'type', fields: ['field1', 'field2'] ,
     type: 'type2' ,
     type: 'type', fields: ['field1', 'field2'] ,
  ]

我的计划是通过数组进行过滤,但我的问题是我不知道哪种类型会向我发送 API,因此按 item.type 过滤对我不起作用。

【问题讨论】:

欢迎来到 Stack Overflow!访问help center,使用tour 了解内容和How to Ask。请首先>>>Search for related topics on SO,如果您遇到困难,请发布您的尝试的minimal reproducible example,并使用[<>] 记录输入和预期输出sn-p 编辑器。 【参考方案1】:

如果那是您想要的确切解决方案。以下代码 sn -p 可能会对您有所帮助。

    const arr = [
       type: 'type', fields: ['field1'],
       type: 'type2',
       type: 'type', fields: ['field2']
    ]
    
    const modifyArr = (data) => 
      let res = [];
      arr.map((item) => 
          if(item.type == data.type)
            if(Object.keys(item).includes('fields'))
              res = res.concat(item.fields);
            
          
      );
      return Object.keys(data).includes('fields') ?  type: data.type, fields: res  :  type: data.type ;



let newArr = arr.map(item => modifyArr(item));

console.log(newArr); 

这将打印出来

[
     type: 'type', fields: ['field1', 'field2'] ,
     type: 'type2' ,
     type: 'type', fields: ['field1', 'field2'] ,
  ]

【讨论】:

【参考方案2】:

const arr = [ type: 'type', fields: ['field1'],  type: 'type2',  type: 'type', fields: ['field2']];

result = arr.map(( type ) => 
    const fields = arr.filter((o) => o.type === type).flatMap((e) => e.fields);
    return  type, ...fields[0] ?  fields  :  ;
);

console.log(result);
//[
//    "type": "type", "fields": ["field1", "field2"],
//    "type": "type2",
//    "type": "type", "fields": ["field1", "field2"]
//]

【讨论】:

以上是关于如何在数组中找到具有相同键值的对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在构造函数中初始化具有相同值的对象数组

如何组合 2 个对象并在其中合并数组 [重复]

删除嵌套数组中具有键值的对象

找到重复的值并比较另一个键

在 MySQL 中,如何编写 INSERT-INTO-VALUES 查询,以便在已存在具有相同主键值的记录时将其静默丢弃?

检查对象数组中是不是存在具有特定键值的对象