js过滤数组对象id相同的数据
时间: 2024-11-16 20:20:08 浏览: 7
在JavaScript中,如果你想要从数组中过滤掉所有`id`相同的数据,可以使用`Array.prototype.filter()`方法结合`reduce()`或`Set`来实现。这里是一个例子:
```javascript
let arr = [
{ name: '张三', id: '1' },
{ name: '李四', id: '1' },
{ name: '王五', id: '2' },
{ name: '赵六', id: '3' },
];
function filterById(arr) {
return arr.reduce((prev, curr) => prev.find(prevItem => prevItem.id === curr.id) ? prev : [...prev, curr], []);
}
let uniqueIds = filterById(arr);
console.log(uniqueIds); // 输出:[ { name: '张三', id: '1' }, { name: '李四', id: '1' }, { name: '王五', id: '2' }, { name: '赵六', id: '3' } ]
```
这个函数会创建一个新的数组,其中只包含每个`id`第一次出现的对象。如果找到`id`已经存在的对象,它将不会被添加到结果中。
相关问题
js过滤数组对象id相同的数据,有哪些方法
在JavaScript中,有几种常见的方法可以用来过滤数组中ID相同的数据:
1. **使用Set**:
Set是一种不允许重复值的集合数据结构。你可以先将数组转换为Set,然后回显到数组中,这会自动去除重复项。示例:
```javascript
function filterDuplicates(array) {
return [...new Set(array.map(item => item.id))];
}
```
2. **使用filter和indexOf**:
这种方法通过遍历数组,如果当前元素的ID已经在新数组中存在,则跳过。示例:
```javascript
function filterDuplicates(array) {
return array.filter((item, index, self) => !self.findIndex(i => i.id === item.id).toString());
}
```
3. **使用reduce** 和 **findIndex** 或 **includes**:
使用reduce函数结合findIndex查找是否存在已存在的ID。示例:
```javascript
function filterDuplicates(array) {
return array.reduce((prev, curr) => prev.includes(curr.id) ? prev : [...prev, curr], []);
}
```
4. **ES6 Map**:
利用Map的键唯一特性,如果遇到相同的ID,就只保留一个。示例:
```javascript
function filterDuplicates(array) {
let map = new Map();
return array.filter(item => !map.has(item.id) && (map.set(item.id, true)));
}
```
以上每种方法都有其适用场景,可以根据实际需求选择合适的方式。
过滤数组对象重复定的数据
如果你想过滤一个数组对象中的重复项,可以使用 JavaScript 中的 Set 对象来实现。下面给出一个示例代码:
```javascript
const arr = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' },
{ id: 1, name: 'Alice' },
{ id: 4, name: 'David' },
{ id: 2, name: 'Bob' }
];
const uniqueArr = Array.from(new Set(arr.map(item => JSON.stringify(item)))).map(item => JSON.parse(item));
console.log(uniqueArr);
// Output: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' }, { id: 4, name: 'David' }]
```
这里的关键是将每个对象转换为一个字符串,然后使用 Set 对象来过滤重复项,最后再将字符串转换回对象。需要注意的是,这种方法会忽略对象中的顺序,因此如果两个对象的属性相同但是顺序不同,也会被视为不同的对象。如果需要保留对象中的顺序,则需要使用其他方法来解决。
阅读全文