js 数组使用id去重
时间: 2023-12-03 19:03:28 浏览: 32
可以使用 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去重代码示例
可以使用reduce和Map来对对象数组根据id去重,代码示例如下:
```javascript
const arr = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Charlie' },
{ id: 3, name: 'David' }
];
const map = new Map();
const uniqueArr = arr.reduce((acc, cur) => {
if (!map.has(cur.id)) {
map.set(cur.id, true);
acc.push(cur);
}
return acc;
}, []);
console.log(uniqueArr);
// Output: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'David' }]
```
请问还有什么问题吗?