首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在lodash中使用topair展平嵌套对象

在lodash中使用topair展平嵌套对象
EN

Stack Overflow用户
提问于 2021-10-10 17:43:26
回答 1查看 36关注 0票数 0

我有一个这样的对象:

代码语言:javascript
复制
let order={
  "john":{
    "hamburger":4
  },
  "alice":{
    "pizza":10,
    "milkshake":2
  },
  "bob":{
  }
}

我想像这样扁平化:

代码语言:javascript
复制
let res=[
   ["john","hamburger",4],

   ["alice","pizza",4],
   ["alice","milkshake",4]

]

我知道如何使用keyBy反向操作,但如何将其从递归对象转换为递归数组?我试着使用toPairs,但我想不出如何使它递归

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-10 18:14:04

使用_.toPairs()获取[name, items]对的数组,并使用_.flatMap()对其进行迭代。从items对象获取对,并使用_.map()创建包含信息的数组:

代码语言:javascript
复制
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)
代码语言:javascript
复制
<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()来获得相同的结果:

代码语言:javascript
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69517555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档