JavaScript 数组对象去重:根据属性值高效移除重复元素
可以使用reduce方法和map方法来实现根据数组对象的某个属性值去重。
假设有一个数组arr,其中包含多个对象,每个对象都有一个属性id,我们要根据id去重。
以下是使用reduce方法的实现代码:
var arr = [
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 3, name: 'Alice'},
{id: 4, name: 'David'},
{id: 2, name: 'Bob'}
];
var uniqueArr = arr.reduce(function(prev, cur) {
var ids = prev.map(function(obj) {
return obj.id;
});
if (ids.indexOf(cur.id) === -1) {
prev.push(cur);
}
return prev;
}, []);
console.log(uniqueArr);
输出结果为:
[
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 3, name: 'Alice'},
{id: 4, name: 'David'}
]
在上面的代码中,我们使用reduce方法遍历原数组arr,并在每次迭代中判断当前对象的id是否已存在于prev数组中。如果不存在,则将当前对象添加到prev数组中,最终得到去重后的数组uniqueArr。
另外也可以使用filter方法来实现去重,以下是使用filter方法的实现代码:
var arr = [
{id: 1, name: 'Alice'},
{id: 2, name: 'Bob'},
{id: 3, name: 'Alice'},
{id: 4, name: 'David'},
{id: 2, name: 'Bob'}
];
var uniqueArr = arr.filter(function(obj, index, array) {
return array.findIndex(function(item) {
return item.id === obj.id;
}) === index;
});
console.log(uniqueArr);
输出结果与上面的代码相同。在这个实现中,我们使用filter方法过滤出满足条件的对象,即在array中的索引与使用findIndex方法查找到的索引相等的对象。
这两种方法都可以实现根据数组对象的某个属性值去重,具体使用哪种方法可以根据实际情况来选择。
原文地址: https://www.cveoy.top/t/topic/qlS1 著作权归作者所有。请勿转载和采集!