我有一个这样的对象:
let order={
"john":{
"hamburger":4
},
"alice":{
"pizza":10,
"milkshake":2
},
"bob":{
}
}我想像这样扁平化:
let res=[
["john","hamburger",4],
["alice","pizza",4],
["alice","milkshake",4]
]我知道如何使用keyBy反向操作,但如何将其从递归对象转换为递归数组?我试着使用toPairs,但我想不出如何使它递归
发布于 2021-10-10 18:14:04
使用_.toPairs()获取[name, items]对的数组,并使用_.flatMap()对其进行迭代。从items对象获取对,并使用_.map()创建包含信息的数组:
const { flatMap, toPairs, map } = _
const order = {"john":{"hamburger":4},"alice":{"pizza":10,"milkshake":2},"bob":{}}
const result = flatMap(
toPairs(order),
([name, items]) =>
map(
toPairs(items),
([product, price]) => [name, product, price]
)
)
console.log(result)<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
在vanilla JS中,您可以结合使用Array.flatMap()和Object.entries()来获得相同的结果:
const order = {"john":{"hamburger":4},"alice":{"pizza":10,"milkshake":2},"bob":{}}
const result = Object
.entries(order)
.flatMap(([name, items]) =>
Object.entries(items)
.map(([product, price]) => [name, product, price])
)
console.log(result)
https://stackoverflow.com/questions/69517555
复制相似问题