Javascript对象数组-根据特定键的唯一性进行过滤,并仅保留某些键
我确信这个问题以前在这里以某种形式被问过,但我很难找到正确的解决方案。我有这样一个对象数组:Javascript对象数组-根据特定键的唯一性进行过滤,并仅保留某些键,javascript,Javascript,我确信这个问题以前在这里以某种形式被问过,但我很难找到正确的解决方案。我有这样一个对象数组: [ {id:"124", name:"Joe", lname:"Smith", age:"14"}, {id:"124", name:"Joe", lname:"Smith", age:"17"}, {id:"124", name:"Joe", lname:"Smith", age:"21"}, {id:"128", name:"Tom", lname:"Cans", age:"18"}
[
{id:"124", name:"Joe", lname:"Smith", age:"14"},
{id:"124", name:"Joe", lname:"Smith", age:"17"},
{id:"124", name:"Joe", lname:"Smith", age:"21"},
{id:"128", name:"Tom", lname:"Cans", age:"18"},
{id:"132", name:"Mik", lname:"Brak", age:"21"}
];
我想缩短这个数组,以便它只包含具有唯一id
键的对象,以及只有键id、name、lname。那么,我想要的输出是:
[
{id:"124", name:"Joe", lname:"Smith"},
{id:"128", name:"Tom", lname:"Cans"},
{id:"132", name:"Mik", lname:"Brak"}
];
到目前为止我所做的工作-我可以使用以下代码片段创建一个唯一ID数组,但这并不能让我达到我需要的目的:
let uniqueIDs = [... new Set(mydata.map(val => val.id))];
感谢您的帮助 您可以获取一组字符串,并通过解析来映射它们
var数组=[{id:“124”,name:“乔”,lname:“史密斯”,age:“14”},{id:“124”,name:“乔”,lname:“史密斯”,age:“17”},{id:“124”,name:“乔”,lname:“史密斯”,age:“21”},{id:“128”,name:“汤姆”,lname:“罐头”,age:“18”},{id:“132”,name:“迈克”,lname:“布拉克”,age:“21”},
unique=Array.from(
新集合(array.map(({id,name,lname})=>JSON.stringify({id,name,lname})),
JSON.parse
);
console.log(唯一)代码>
.as控制台包装{max height:100%!important;top:0;}
将数组项存储在对象中,按id
索引,并跳过任何已有的数组项:
var obj={}
[{id:“124”,姓名:“乔”,姓名:“史密斯”,年龄:“14”},
{id:“124”,姓名:“乔”,姓名:“史密斯”,年龄:“17”},
{id:“124”,姓名:“乔”,姓名:“史密斯”,年龄:“21”},
{id:“128”,姓名:“汤姆”,姓名:“罐头”,年龄:“18”},
{id:“132”,名字:“Mik”,名字:“Brak”,年龄:“21”}
].forEach(功能(d){
如果(!obj[d.id]){
//忽略你不感兴趣的信息
obj[d.id]={id:d.id,name:d.name,lname:d.lname}
}
})
var uniq=对象值(obj);
console.log(uniq)
第一步是创建一个数据结构,您可以确保您的条目是唯一的。我喜欢使用reduce将数组转换为映射
const arrayToMap=array.reduce((obj,{id,name,lname})=>({……obj,[id]:{id,name,lname}),{});
然后,您需要通过迭代键来构建映射到数组
const-mapToArray=Object.keys(arrayToMap).map(key=>({…arrayToMap[key]});
以下是一种使用Set
和filter
删除重复的id
键和map
删除age
键的方法:
const数据=[
{id:“124”,姓名:“乔”,姓名:“史密斯”,年龄:“14”},
{id:“124”,姓名:“乔”,姓名:“史密斯”,年龄:“17”},
{id:“124”,姓名:“乔”,姓名:“史密斯”,年龄:“21”},
{id:“128”,姓名:“汤姆”,姓名:“罐头”,年龄:“18”},
{id:“132”,名字:“Mik”,名字:“Brak”,年龄:“21”}
];
const id=新集合(data.map(e=>e.id));
常量结果=数据
.filter(e=>ids.delete(e.id))
.map(e=>{return{id:e.id,name:e.name,lname:e.lname};})
;
console.log(result);
许多答案很快就会出现-将尝试解决所有问题