我有一个对象数组列表。我需要将所有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
}
]
答案 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);