我相信这个问题以前在这里以某种形式被问过,但我在寻找正确的解决方案时遇到了麻烦。我有一个这样的对象数组:
[
{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。然后我要得到的输出是:
[
{id:"124", name:"Joe", lname:"Smith"},
{id:"128", name:"Tom", lname:"Cans"},
{id:"132", name:"Mik", lname:"Brak"}
];
到目前为止,我已经做了什么-我可以使用以下代码片段来创建一个唯一I数组,但这并不能让我达到我需要的地方:
let uniqueIDs = [... new Set(mydata.map(val => val.id))];
感谢您的帮助!
发布于 2018-09-15 05:36:05
将数组项存储在由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)
发布于 2018-09-15 05:34:52
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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
发布于 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] });
https://stackoverflow.com/questions/52339419
复制相似问题