如何从对象数组的多个键中获取所有值?

时间:2018-11-03 18:09:30

标签: javascript ecmascript-6 ecmascript-5

我需要从对象数组的多个键中获取值。

trip = [
    {sp: 'cbe', ep: 'tpr'}, 
    {sp: 'tpr', ep: 'erd'}, 
    {sp: 'erd', ep: 'blr'}
];

输出应为["cbe", "tpr", "erd", "blr"]

我尝试过的内容作为答案发布,并且可以使用,但是我使用了两个映射来获得所需的输出。我知道应该有比我的答案更好的方法。

这是我在code上的闪电战

4 个答案:

答案 0 :(得分:3)

可以在这里使用新的flatMap函数,但是请注意,浏览器支持有限

trip = [
    {sp: 'cbe', ep: 'tpr'}, 
    {sp: 'tpr', ep: 'erd'}, 
    {sp: 'erd', ep: 'blr'}
];

res = [ ...new Set(   trip.flatMap(Object.values)    )]

console.log(res)

答案 1 :(得分:1)

    const trip = [
        {sp: 'cbe', ep: 'tpr'}, 
        {sp: 'tpr', ep: 'erd'}, 
        {sp: 'erd', ep: 'blr'}
    ];
    const r = trip.map( m => {
      return m.sp
    });
    const s = trip.map( m => {
      return m.ep
    });
    console.log(Array.from(new Set(r.concat(s))));

答案 2 :(得分:1)

这是另一种方式:(已更新为聚合所有键而不是显式键)

const trip = [
    {sp: 'cbe', ep: 'tpr'}, 
    {sp: 'tpr', ep: 'erd'}, 
    {sp: 'erd', ep: 'blr'}
];

const t = Array.from(trip.reduce((a, el) => {
    for (let key in el) a.add(el[key]);
    return a;
}, new Set()));

console.log(t);

答案 3 :(得分:0)

如果您还可以具有不太易读的一线……

trip = [{
    sp: 'cbe',
    ep: 'tpr'
  },
  {
    sp: 'tpr',
    ep: 'erd'
  },
  {
    sp: 'erd',
    ep: 'blr'
  }
];

const res = [...new Set([].concat.apply([], trip.map(item => Object.values(item))))];

console.log(res);