我有一个包含名称和年龄属性的对象数组,我想过滤掉数组中不同年龄的集合,所以我可以做类似的事情
function distinctAges() {
const guests = [
{name: 'Kiley', age: 24},
{name: 'Tom', age: 36},
{name: 'Jason', age: 67},
{name: 'Mike', age: 24},
...];
let ageSet = new Set();
guests.foreach(g => ageSet.add(g.age));
return ageSet;
}
有没有像 Distinct
操作一样不使用 Set
数据类型?如果使用 Set
,是否可以将转换写在一行中?
最佳答案
集合是 JS 当前获取不同值数组的方式。您可以将一个对象数组映射到一个值数组,创建一个集合,然后传播回一个数组:
const distinctBy = (prop, arr) => [...new Set(arr.map(o => o[prop]))]
const guests = [{"name":"Kiley","age":24},{"name":"Tom","age":36},{"name":"Jason","age":67},{"name":"Mike","age":24}]
const result = distinctBy('age', guests)
console.log(result)
为了使其更通用,您可以将 prop
替换为谓词函数:
const distinctBy = (predicate, arr) => [...new Set(arr.map(predicate))]
const guests = [{"name":"Kiley","age":24},{"name":"Tom","age":36},{"name":"Jason","age":67},{"name":"Mike","age":24}]
const result = distinctBy(o => o.age, guests)
console.log(result)
关于Javascript ES6 将对象数组映射到 Set 或按不同属性过滤掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61533745/