【问题标题】:flatten nested object with topairs in lodash在lodash中用topairs展平嵌套对象
【发布时间】:2021-11-29 16:38:58
【问题描述】:

我有一个这样的对象:

let order={
  "john":{
    "hamburger":4
  },
  "alice":{
    "pizza":10,
    "milkshake":2
  },
  "bob":{
  }
}

我想像这样变平:

let res=[
   ["john","hamburger",4],

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

]

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

【问题讨论】:

    标签: node.js object lodash javascript-objects


    【解决方案1】:

    使用_.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>

    在原版 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)

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2019-07-20
      • 2018-10-28
      • 2020-09-05
      • 2017-07-02
      • 2020-12-22
      相关资源
      最近更新 更多