Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript对象数组-根据特定键的唯一性进行过滤,并仅保留某些键_Javascript - Fatal编程技术网

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);
许多答案很快就会出现-将尝试解决所有问题