首页 > 解决方案 > 展平数组对象的数组

问题描述

我有一系列类别,其中我有项目。我宁愿想要一个项目数组,但我也想要项目对象内的类别的一些属性

基本上我想把它弄平:

[
 {catname: "caregory1", items: [{ name: "item1" }, {name: "item2"}] }
 {catname: "caregory2", items: [{ name: "item3" }, {name: "item4"}, {name: "item5"}] }
]

进入这个?

[
 {catname: "caregory1", name: "item1" }
 {catname: "caregory1", name: "item2" }
 {catname: "caregory2", name: "item3" },
 {catname: "caregory2", name: "item4" },
 {catname: "caregory2", name: "item5" }
]

谢谢

标签: javascript

解决方案


您可以为此使用flatMap()和。map()

  • flatMap()在主数组上使用并使用对象解构和传播 stynax 隔离属性items和其余属性
  • 然后map()在数组的属性上使用并返回具有父项items以外属性的嵌套对象的属性。items

const arr = [
 {catname: "caregory1", items: [{ name: "item1" }, {name: "item2"}] },
 {catname: "caregory2", items: [{ name: "item3" }, {name: "item4"}, {name: "item5"}] }
]

const res = arr.flatMap(({items,...rest}) => items.map(a => ({...a,...rest})))

console.log(res)

如果flatMap()您使用的浏览器不支持,请使用concat()

const arr = [
 {catname: "caregory1", items: [{ name: "item1" }, {name: "item2"}] },
 {catname: "caregory2", items: [{ name: "item3" }, {name: "item4"}, {name: "item5"}] }
]

const res = [].concat(...arr.map(({items,...rest}) => items.map(a => ({...a,...rest}))))

console.log(res)


推荐阅读