js根据某个字段去重
时间: 2023-07-02 14:07:08 浏览: 62
你可以使用 Set 数据结构和 Array.prototype.filter() 方法来根据某个字段去重。
例如,如果你有一个包含对象的数组,每个对象都有一个 name 属性,你可以按照以下方式去重:
```javascript
const arr = [
{id: 1, name: 'John'},
{id: 2, name: 'Jane'},
{id: 3, name: 'John'},
{id: 4, name: 'Bob'},
{id: 5, name: 'Jane'}
];
const uniqueArr = Array.from(new Set(arr.map(item => item.name)))
.map(name => {
return arr.find(item => item.name === name);
});
console.log(uniqueArr);
// Output: [{id: 1, name: 'John'}, {id: 2, name: 'Jane'}, {id: 4, name: 'Bob'}]
```
在上述代码中,我们首先使用 `Array.prototype.map()` 方法创建一个仅包含 name 属性的新数组。我们然后使用 Set 数据结构去重该数组。最后,我们使用 `Array.prototype.find()` 方法在原始数组中找到每个唯一的对象,并将其推入新数组中。
相关问题
js根据某个字段去重高效率的方法
可以使用哈希表(Hash Table)来实现根据某个字段去重的高效率方法。
具体步骤如下:
1. 定义一个空的哈希表对象。
2. 遍历需要去重的数组,对于每个元素,取出其需要去重的字段值作为哈希表的键值,将该元素保存到哈希表中。
3. 哈希表的键值是唯一的,因此重复的元素只会被保存一次,从而实现了去重。
4. 最后,将哈希表的所有值转换为数组返回即可。
以下是代码示例:
```javascript
function uniqueByField(arr, field) {
const map = new Map();
for (const item of arr) {
const key = item[field];
if (!map.has(key)) {
map.set(key, item);
}
}
return Array.from(map.values());
}
```
使用示例:
```javascript
const arr = [
{id: 1, name: '张三'},
{id: 2, name: '李四'},
{id: 3, name: '张三'},
{id: 4, name: '王五'},
{id: 5, name: '李四'}
];
const uniqueArr = uniqueByField(arr, 'name');
console.log(uniqueArr);
// 输出:[
// {id: 1, name: '张三'},
// {id: 2, name: '李四'},
// {id: 4, name: '王五'}
// ]
```
数组对象根据某个字段去重
可以使用reduce和Map来实现根据某个字段去重的功能。具体实现如下:
```javascript
const arr = [
{ id: 1, name: 'apple' },
{ id: 2, name: 'banana' },
{ id: 3, name: 'apple' },
{ id: 4, name: 'orange' },
{ id: 5, name: 'banana' }
];
const result = Array.from(arr.reduce((map, obj) => {
if (!map.has(obj.name)) map.set(obj.name, obj);
return map;
}, new Map()).values());
console.log(result);
// [{ id: 1, name: 'apple' }, { id: 2, name: 'banana' }, { id: 4, name: 'orange' }]
```