typescript - JavaScript:从对象数组中移除重复项
我有一个看起来像这样的数据数组。
data = [
{ "name": "Apple", "type": "Fruit"},
{ "name": "Cabbage", "type": "Vegetable"} ,
{ "name": "Orange", "type": "Fruit"}
]
我想过滤掉 type 已经存在的元素。我想保留第一个元素。
例如,保留苹果而不是橙子
data = [
{ "name": "Apple", "type": "Fruit"},
{ "name": "Cabbage", "type": "Vegetable"}
]
答案#1
使用 Array#filter,您可以在遍历数组的同时更新 Set 来跟踪已添加的类型:
const data = [ { "name": "Apple", "type": "Fruit"}, { "name": "Cabbage", "type": "Vegetable"}, { "name": "Orange", "type": "Fruit"} ];
const typeSet = new Set();
const res = data.filter(({ type }) => {
if(typeSet.has(type)) return false;
typeSet.add(type);
return true;
});
console.log(res);答案#2
1) 如果 type 尚未出现在 dict 中,你可以使用 filter 和 Set 过滤结果,如下所示:
data.filter((o) => (dict.has(o.type) ? false : dict.add(o.type, true)))
const data = [
{ name: "Apple", type: "Fruit" },
{ name: "Cabbage", type: "Vegetable" },
{ name: "Orange", type: "Fruit" },
];
const dict = new Set();
const result = data.filter((o) => (dict.has(o.type) ? false : dict.add(o.type, true)));
console.log(result)2) 你也可以使用 for..of 和 Set,如下所示:
const data = [
{ name: "Apple", type: "Fruit" },
{ name: "Cabbage", type: "Vegetable" },
{ name: "Orange", type: "Fruit" },
];
const dict = new Set(), result = [];
for (let o of data) {
if (!dict.has(o.type)) {
result.push(o);
dict.add(o.type);
}
}
console.log(result);