如何将对象列表合并到单个数组中

时间:2019-11-25 08:34:51

标签: javascript arrays json typescript

我有一个对象数组列表。我需要将所有options项目合并为一个数组。 这是对象的示例数组。

let data = [
  {
    name: "group1",
    options: [
      {
        item: "item1",
        price: 100
      },
      {
        item: "item2",
        price: 200
      },
      {
        item: "item3",
        price: 300
      }
    ]
  },
  {
    name: "group2",
    options: [
      {
        item: "item4",
        price: 101
      },
      {
        item: "item5",
        price: 201
      }
    ]
  },
  {
    name: "group3",
    options: [
      {
        item: "item6",
        price: 254
      },
      {
        item: "item7",
        price: 358
      }
    ]
  }
]

输出类似:


let options = [
  {
    item: "item1",
    price: 100
  },
  {
    item: "item2",
    price: 200
  },
  {
    item: "item3",
    price: 300
  },
  {
    item: "item4",
    price: 101
  },
  {
    item: "item5",
    price: 201
  },
  {
    item: "item6",
    price: 254
  },
  {
    item: "item7",
    price: 358
  }
]

2 个答案:

答案 0 :(得分:5)

您可以使用reduce来做到这一点:

const options = data.reduce((acc, item) => acc.concat(item.options), [])

答案 1 :(得分:3)

您可以尝试使用Array.prototype.flatMap()

  

flatMap()方法首先使用映射函数映射每个元素,然后将结果展平为新数组。它与map()后跟 depth 1的flat()相同,但是flatMap()通常非常有用,因为将两者合并为一种方法效率更高

let options = data.flatMap(d => d.options);

let data = [
  {
    name: "group1",
    options: [
      {
        item: "item1",
        price: 100
      },
      {
        item: "item2",
        price: 200
      },
      {
        item: "item3",
        price: 300
      }
    ]
  },
  {
    name: "group2",
    options: [
      {
        item: "item4",
        price: 101
      },
      {
        item: "item5",
        price: 201
      }
    ]
  },
  {
    name: "group3",
    options: [
      {
        item: "item6",
        price: 254
      },
      {
        item: "item7",
        price: 358
      }
    ]
  }
];


let options = data.flatMap(d => d.options);
console.log(options);