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:"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))];
任何帮助表示赞赏!
解决方案
将您的数组项存储在一个由 索引的对象中id
,并跳过您已经拥有的任何内容:
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)
推荐阅读
- javascript - AngularJS ng-init 未全局初始化变量
- python - 如何制作带有登录输入、输入区域和提交按钮的 tkinter 程序
- python-xarray - 从数据集中计算新变量并使用新维度保存它们
- database - PostgreSQL:聊天对话的数据库结构
- android - EditText drawableStart 在文本更改时消失
- git - git ls-remote 的“模式”的定义是什么?
- reactjs - 在 React 中动态启用/禁用 react-bootstrap 选项卡
- html - 将 HTML 符号代码显示为代码,而不是符号
- java - 我们如何在java中使用twilio api获取whatsapp消息的已读回执状态?
- reactjs - 反应路由器竞争条件