js 数组使用id去重
时间: 2023-12-03 20:03:28 AIGC 浏览: 96
可以使用 Set 数据结构来去重,将数组转化成 Set 后再转回数组即可。
比如,假设有一个包含多个对象的数组,每个对象都有一个唯一的 id 属性,现在需要根据 id 去重:
```js
const arr = [
{ id: 1, name: 'apple' },
{ id: 2, name: 'banana' },
{ id: 1, name: 'orange' },
{ id: 3, name: 'pear' },
{ id: 2, name: 'grape' }
];
const uniqueArr = Array.from(new Set(arr.map(item => item.id))).map(id => {
return arr.find(item => item.id === id);
});
console.log(uniqueArr); // [{ id: 1, name: 'apple' }, { id: 2, name: 'banana' }, { id: 3, name: 'pear' }]
```
上面的代码中,首先使用 `map` 方法将原数组中的每个对象的 id 属性提取出来,然后使用 Set 去重。接着,使用 `Array.from` 方法将 Set 转化成数组。最后,使用 `map` 方法遍历去重后的 id 数组,通过 `find` 方法找到原数组中对应的对象,然后返回一个新数组。这样就实现了根据 id 去重的需求。
相关问题
js 数组根据id去重
可以使用数组的 reduce() 方法和一个对象来实现根据 id 去重。具体步骤如下:
1. 使用 reduce() 方法遍历数组,将每个元素的 id 作为 key 存入一个空对象中。
2. 如果对象中不存在当前元素的 id,则将其加入结果数组中,并将其 id 在对象中设为 true。
3. 返回结果数组。
示例代码如下:
```javascript
const arr = [
{ id: 1, name: 'foo' },
{ id: 2, name: 'bar' },
{ id: 1, name: 'baz' },
{ id: 3, name: 'qux' },
{ id: 2, name: 'quux' }
];
const uniqueArr = arr.reduce((acc, cur) => {
if (!acc[cur.id]) {
acc[cur.id] = true;
acc.result.push(cur);
}
return acc;
}, { result: [] }).result;
console.log(uniqueArr); // [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 3, name: 'qux' }]
```
在上面的代码中,我们使用一个对象 `{ result: [] }` 作为 reduce() 方法的初始值,其中 `result` 属性存储去重后的结果数组。
在 reduce() 方法的回调函数中,如果对象中不存在当前元素的 id,则将其加入结果数组中,同时将其 id 在对象中设为 true。最后返回包含去重后结果的对象的 `result` 属性。
js对象数组根据id去重
### 去除对象数组中的重复项
为了去除对象数组中基于 `id` 属性的重复项,可以采用多种方法实现这一目标。下面介绍一种利用 JavaScript 的高阶函数和数据结构来完成此操作的方式。
#### 方法一:使用 Set 和 map 函数
这种方法通过创建一个新的映射关系(Map),其中键为对象的 `id` 字段值,而值则为整个对象本身。由于 Map 结构不允许存在相同的键名,因此能够自动过滤掉具有相同 ID 的多余条目[^1]。
```javascript
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }
];
// 使用 Map 来存储唯一的 user 对象
function getUniqueUsersById(usersArray) {
const uniqueUsers = Array.from(new Map(
usersArray.map(user => [user.id, user])
).values());
return uniqueUsers;
}
console.log(getUniqueUsersById(users));
```
另一种常见的做法是借助 lodash 库提供的工具函数 `_.uniqBy()`,它可以更简洁地处理这个问题:
#### 方法二:使用 Lodash 的 uniqBy 函数
Lodash 是一个非常流行的实用程序库,在这里可以直接调用其内置的方法来进行去重操作。只需指定要依据的对象字段即可轻松解决问题。
```javascript
import _ from 'lodash';
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }
];
const uniqueUsers = _.uniqBy(users, 'id');
console.log(uniqueUsers);
```
这两种方式都能有效地解决给定问题,并且可以根据项目需求和个人偏好选择合适的技术方案。
阅读全文
相关推荐
















