如何在数组中找到具有相同键值的对象?
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"]
//]
【讨论】:
以上是关于如何在数组中找到具有相同键值的对象?的主要内容,如果未能解决你的问题,请参考以下文章
在 MySQL 中,如何编写 INSERT-INTO-VALUES 查询,以便在已存在具有相同主键值的记录时将其静默丢弃?