首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript对象数组-根据特定键的唯一性进行过滤,仅保留特定键

Javascript对象数组-根据特定键的唯一性进行过滤,仅保留特定键
EN

Stack Overflow用户
提问于 2018-09-15 05:30:21
回答 4查看 40关注 0票数 1

我相信这个问题以前在这里以某种形式被问过,但我在寻找正确的解决方案时遇到了麻烦。我有一个这样的对象数组:

代码语言: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:"132", name:"Mik", lname:"Brak", age:"21"}
];

我想缩短这个数组,以便它只包含具有唯一名称键的对象,以及键id,id,lname。然后我要得到的输出是:

代码语言:javascript
复制
 [
   {id:"124", name:"Joe", lname:"Smith"},
   {id:"128", name:"Tom", lname:"Cans"},
   {id:"132", name:"Mik", lname:"Brak"}
 ];

到目前为止,我已经做了什么-我可以使用以下代码片段来创建一个唯一I数组,但这并不能让我达到我需要的地方:

代码语言:javascript
复制
 let uniqueIDs = [... new Set(mydata.map(val => val.id))];

感谢您的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-15 05:36:05

将数组项存储在由id索引的对象中,并跳过已有的任何项:

代码语言:javascript
复制
var obj = {}
[ {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"}
].forEach(function(d){
  if ( ! obj[d.id] ) {
    // omit the info you're not interested in
    obj[d.id] = { id: d.id, name: d.name, lname: d.lname } 
  }
})
var uniq = Object.values(obj);
console.log(uniq)

票数 1
EN

Stack Overflow用户

发布于 2018-09-15 05:34:52

您可以获取JSON字符串的Set,并通过解析它来映射它们。

代码语言:javascript
复制
var array = [{ 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" }], 
    unique = Array.from(
        new Set(array.map(({ id, name, lname }) => JSON.stringify({ id, name, lname }))),
        JSON.parse
    );

console.log(unique);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN

Stack Overflow用户

发布于 2018-09-15 05:37:32

第一步是创建一个数据结构,在该结构中您可以确保您的条目是唯一的。我喜欢reduce将数组转换为map。

const arrayToMap = array.reduce((obj, { id, name, lname}) => ({ ...obj, [id]: { id, name, lname }), {});

然后,您需要通过迭代键来构建到数组的映射。

const mapToArray = Object.keys(arrayToMap).map(key => ({ ...arrayToMap[key] });

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52339419

复制
相关文章

相似问题

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