ts 怎么将map按照某一字段值去重
时间: 2024-01-23 09:04:26 浏览: 79
你可以使用 TypeScript 中的 Set 和 Array.from() 方法来实现按照某一字段值去重。具体操作如下:
1. 将 map 转为数组
2. 根据需要去重的字段值作为键,创建一个 Set 对象
3. 遍历数组,将需要去重的字段值作为键存入 Set 对象
4. 将 Set 对象转为数组,即为去重后的结果
下面是代码示例:
```typescript
// 假设原始的 map 为 dataMap,需要按照 name 字段值去重
const dataMap = new Map([
[{ id: 1, name: 'Alice' }, { age: 20, gender: 'female' }],
[{ id: 2, name: 'Bob' }, { age: 22, gender: 'male' }],
[{ id: 3, name: 'Alice' }, { age: 25, gender: 'female' }],
[{ id: 4, name: 'Bob' }, { age: 28, gender: 'male' }]
]);
const uniqueDataArray = Array.from(new Set(Array.from(dataMap.keys()).map(item => item.name))).map(name => {
return Array.from(dataMap).find(([key, value]) => key.name === name);
});
console.log(uniqueDataArray); // 输出 [[{ id: 1, name: 'Alice' }, { age: 20, gender: 'female' }], [{ id: 2, name: 'Bob' }, { age: 22, gender: 'male' }]]
```
解释一下上面的代码:
首先,我们通过 `Array.from(dataMap.keys())` 将 map 的键转为数组。然后,通过 `map(item => item.name)` 将每个键对象的 name 字段值取出来,形成一个字符串数组。接着,我们将这个字符串数组转为 Set 对象,这样就自动去重了。最后,我们通过 `Array.from()` 方法将 Set 对象转为数组,并且遍历这个数组,通过 `find()` 方法找到第一个符合条件的键值对,然后将这个键值对作为结果数组的元素。这样就完成了按照 name 字段值去重的操作。
阅读全文