【问题标题】:Combine arrays from values in array of objects?从对象数组中的值组合数组?
【发布时间】:2021-01-09 18:05:10
【问题描述】:

我有一个包含一堆对象的数组:

let sample = [
  {
    name: 'obj1',
    values: ["value1", "value2"]
  },
  {
    name: 'obj2',
    values: ["value3", "value4"]
  },
  {
    name: 'obj3',
    values: ["value5", "value6"]
  }
]

我需要组合对象上的所有数组以得到如下结果:

let outputArray = ["value1", "value2", "value3", "value4", "value5", "value6"]

似乎找不到最好的方法来做到这一点。谢谢。

【问题讨论】:

    标签: javascript node.js arrays object


    【解决方案1】:

    您可以使用Array.flatMap 首先将每个对象映射到其values 数组,然后将结果展平:

    let sample = [
      {
        name: 'obj1',
        values: ["value1", "value2"]
      },
      {
        name: 'obj2',
        values: ["value3", "value4"]
      },
      {
        name: 'obj3',
        values: ["value5", "value6"]
      }
    ]
    
    let outputArray = sample.flatMap(o => o.values);
    console.log(outputArray);

    【讨论】:

      【解决方案2】:

      除了Nick的回答,如果你不使用babel之类的工具,你也可以使用reduce函数在不同的环境中获得更广泛的支持。

      let sample = [
        {
          name: 'obj1',
          values: ["value1", "value2"]
        },
        {
          name: 'obj2',
          values: ["value3", "value4"]
        },
        {
          name: 'obj3',
          values: ["value5", "value6"]
        }
      ]
      
      const result = sample.reduce((acc, item) => {
        return [...acc, ...item.values];
      }, []);
      
      console.log(result);

      【讨论】:

      • 我认为 reduce 也应该比 flatMap 快一点。
      【解决方案3】:

      您可以将Array.reduceArray.concat 一起使用:

      let sample = [
        {
          name: 'obj1',
          values: ["value1", "value2"]
        },
        {
          name: 'obj2',
          values: ["value3", "value4"]
        },
        {
          name: 'obj3',
          values: ["value5", "value6"]
        }
      ];
      
      let valuesArray = sample.reduce((a, b) => a.concat(b['values']), []);
      console.log(valuesArray);

      【讨论】:

        【解决方案4】:

        我认为您要使用的是数组 concat() 方法。 此方法不会更改现有数组,而是返回一个新数组,其中包含连接数组的值。

        我提出的解决方案:

        const outputArray = sample[0].values.concat(sample[1].values, sample[2].values);
        

        【讨论】:

          【解决方案5】:
          let outputArray=[]  
          sample.forEach(item=> { outputArray.push(item.values.map(val=> val)) })
          

          【讨论】:

            猜你喜欢
            • 2019-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-06
            • 2018-02-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多