通过es6在数组中查找不同的对象

Rez*_*eza 4 javascript arrays ecmascript-6

我有一个像下面的数组

const data = [
    {
        name:'AAAA',
        group: 'A',
        age:10
    },
    {
        name:'ABCD',
        group: 'A',
        age:10
    },
    {
        name:'DJSHDJH',
        group: 'B',
        age:15
    },
    {
        name:'FJHF',
        group: 'B',
        age:20
    }
]
Run Code Online (Sandbox Code Playgroud)

我想找到不同的数据group,并age通过es6

预期结果

[
    {
        group: 'A',
        age: 10
    },
    {
        group: 'B',
        age: 15
    },
    {
        group: 'B',
        age: 20
    }
]
Run Code Online (Sandbox Code Playgroud)

我尝试过[... new Set(data.map(x => {x.group, g.age}))]但没有机会

我知道如何循环数据并找到唯一值,但我想使用es6函数

Nen*_*car 9

您可以使用Object.values()with reduce()返回值的数组作为结果.

const data = [{"name":"AAAA","group":"A","age":10},{"name":"ABCD","group":"A","age":10},{"name":"DJSHDJH","group":"B","age":15},{"name":"FJHF","group":"B","age":20}]

var result = Object.values(data.reduce((r, e) => (r[e.group + '|' + e.age] = {group: e.group, age: e.age}, r), {}))
console.log(result)
Run Code Online (Sandbox Code Playgroud)

编写相同代码的另一种方法@Jeremy Thille是使用模板文字属性值简写

const data = [{"name":"AAAA","group":"A","age":10},{"name":"ABCD","group":"A","age":10},{"name":"DJSHDJH","group":"B","age":15},{"name":"FJHF","group":"B","age":20}]

var result = Object.values(data.reduce(function(r, e) {
  let group = e.group, age = e.age;
  return r[`${group}|${age}`] = {group, age}, r
}, {}))

console.log(result)
Run Code Online (Sandbox Code Playgroud)

您也可以按照建议使用ES6参数解构@gyre.

const data = [{"name":"AAAA","group":"A","age":10},{"name":"ABCD","group":"A","age":10},{"name":"DJSHDJH","group":"B","age":15},{"name":"FJHF","group":"B","age":20}]

var result = Object.values(data.reduce((r, {group, age}) => (r[group+'|'+age] = {group, age}, r), {}))
console.log(result)
Run Code Online (Sandbox Code Playgroud)