Javascript ES6 将对象数组映射到 Set 或按不同属性过滤掉

标签 javascript ecmascript-6 set

我有一个包含名称和年龄属性的对象数组,我想过滤掉数组中不同年龄的集合,所以我可以做类似的事情

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/

相关文章:

javascript - Chrome 控制台中 ES6 解构的奇怪行为

javascript - 初学者 : How to fix 'ReferenceError myFunc is not defined' in JavaScript

c++ - 为 C++ 类生成 set/get 方法

javascript - 我想再次单击图标时将其旋转到旧状态

javascript - jquery 获取当前显示的文本(即不仅仅是可见的)

php - 将 php 数组传递给 javascript

javascript - Javascript:Function和Class有什么区别

Python- 在对象列表上使用集合 <class 'xyz.models.abc' >

java - 在 HashSet 中传递方法是个好习惯吗?

javascript - 检测区别于单击并拖动或双击并拖动的单击事件