首页 > 解决方案 > lodash 过滤深度嵌套的对象,返回这些对象的数组

问题描述

我正在尝试返回一个深深嵌套在另一个数组中的对象数组。这是一个带有数组的示例对象:

payment = {
"id": 1,
"tickets" = [{
  "id": 1,
  "ticketItems": [{item1}, {item2}, {item3}]
  },
  {"id": 2",
  "ticketItems":  [{item4}, {item5}, {item6}]
  }]}

使用 lodash 我想返回一个只有项目 1-6 的数组,没有父对象。我试过了:

var items = _.filter(payment.tickets, {'ticketItems'});

但这不会返回一个ticketItems 数组。我发现的所有示例都使用“id:1”之类的条件,但我想要所有的票项,而不仅仅是那些匹配条件的。

标签: lodash

解决方案


您可以使用Array.flatMap()(或 lodash's _.flatMap())并ticketItems从每个tickets对象返回:

const payment = {"id":1,"tickets":[{"id":1,"ticketItems":[{"item1":1},{"item2":2},{"item3":3}]},{"id":2,"ticketItems":[{"item4":4},{"item5":5},{"item6":6}]}]}

const result = payment.tickets.flatMap(o => o.ticketItems)

console.log(result)

与 lodash's 相同的解决方案_.flatMap()

const payment = {"id":1,"tickets":[{"id":1,"ticketItems":[{"item1":1},{"item2":2},{"item3":3}]},{"id":2,"ticketItems":[{"item4":4},{"item5":5},{"item6":6}]}]}

const result = _.flatMap(payment.tickets, 'ticketItems')

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>


推荐阅读