ES6(ECMAScript 2015)是JavaScript语言的一个重要版本,引入了许多新特性和改进。按唯一属性过滤对象是ES6中常用的操作之一,通常结合Array.prototype.filter()
方法来实现。
filter()
方法可以高效地过滤数组中的元素。按唯一属性过滤对象主要分为以下几种类型:
const data = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Alice' }
];
const uniqueNames = data.filter((item, index, array) => {
return array.findIndex(obj => obj.name === item.name) === index;
});
console.log(uniqueNames);
// 输出: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
const data = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 },
{ id: 3, name: 'Alice', age: 25 }
];
const uniqueUsers = data.filter((item, index, array) => {
return array.findIndex(obj => obj.name === item.name && obj.age === item.age) === index;
});
console.log(uniqueUsers);
// 输出: [{ id: 1, name: 'Alice', age: 25 }, { id: 2, name: 'Bob', age: 30 }]
原因:可能是由于filter()
方法的回调函数逻辑不正确,导致没有正确判断属性的唯一性。
解决方法:确保回调函数正确实现了唯一性判断逻辑。可以使用findIndex()
方法来查找数组中是否存在相同属性值的元素,并确保其索引与当前元素的索引一致。
const data = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Alice' }
];
const uniqueNames = data.filter((item, index, array) => {
return array.findIndex(obj => obj.name === item.name) === index;
});
console.log(uniqueNames);
// 输出: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
通过以上内容,你应该对ES6按唯一属性过滤对象有了全面的了解,并能够解决相关问题。
领取专属 10元无门槛券
手把手带您无忧上云