js 相同属性的数组对象 去重
时间: 2023-08-30 19:08:56 浏览: 49
你可以使用 `Array.filter()` 方法和 `Set` 数据结构来实现对具有相同属性的数组对象进行去重。以下是一个示例代码:
```javascript
// 假设arr是包含对象的数组,对象具有相同属性name
const arr = [
{ name: 'John', age: 25 },
{ name: 'Jane', age: 30 },
{ name: 'John', age: 35 },
{ name: 'Jane', age: 40 }
];
// 使用Set和filter去重
const uniqueArr = Array.from(new Set(arr.map(obj => obj.name)))
.map(name => {
return arr.find(obj => obj.name === name);
});
console.log(uniqueArr);
```
在这个例子中,我们首先使用 `map()` 方法将数组中的每个对象的 `name` 属性提取出来并创建一个新的数组。然后,我们使用 `new Set()` 创建一个包含唯一 `name` 值的 Set 对象。最后,我们使用 `Array.from()` 方法将 Set 转换为数组,并使用 `map()` 方法根据 `name` 值查找原始数组中对应的对象。
请注意,这种方法只能去重一个属性,如果需要去重多个属性,可以将多个属性组合成一个唯一的标识。
相关问题
js中数组对象去重filter
在 JavaScript 中,你可以使用 `filter` 方法来对数组进行去重操作。下面是一个示例代码:
```javascript
const array = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 1, name: 'John' },
{ id: 3, name: 'Bob' },];
const uniqueArray = array.filter((obj, index, self) =>
index === self.findIndex((o) => o.id === obj.id && o.name === obj.name)
);
console.log(uniqueArray);
```
上述代码中,我们使用 `filter` 方法和 `findIndex` 方法来进行去重操作。`filter` 方法接受一个回调函数,该函数会在数组的每个元素上被调用。在回调函数中,我们使用 `findIndex` 方法来查找当前元素在数组中的第一个索引位置。如果当前元素的索引与其第一次出现的索引位置相同,则保留该元素,否则过滤掉重复元素。
在上面的示例中,最终会输出如下结果:
```javascript
[
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 3, name: 'Bob' },
]
```
注意:此方法对于数组中的对象元素的属性进行一一比较,如果对象属性较多或者属性值较复杂,建议使用其他更适合的去重方式。
数组对象按某个相同属性值去重
可以使用 JavaScript 中的 reduce 和 findIndex 方法来实现按某个相同属性值去重的功能。
假设要按照对象的 name 属性值去重,代码示例如下:
```javascript
const arr = [
{ name: 'apple', price: 1 },
{ name: 'orange', price: 2 },
{ name: 'apple', price: 3 },
{ name: 'banana', price: 4 },
{ name: 'orange', price: 5 },
];
const result = arr.reduce((acc, cur) => {
const index = acc.findIndex(item => item.name === cur.name);
if (index === -1) {
acc.push(cur);
} else {
acc[index] = cur;
}
return acc;
}, []);
console.log(result);
// 输出:[ { name: 'apple', price: 3 }, { name: 'orange', price: 5 }, { name: 'banana', price: 4 } ]
```
在上面的代码中,reduce 方法的初始值为一个空数组 [],然后遍历原数组 arr 中的每个元素 cur。对于每个元素 cur,使用 findIndex 方法查找新数组 acc 中是否已经存在一个与 cur 对象具有相同 name 属性值的元素。如果存在,则将 cur 对象替换掉 acc 中找到的元素;如果不存在,则将 cur 对象添加到 acc 数组中。
最终得到的 result 数组即为按照 name 属性值去重后的结果。