首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套对象的高效过滤: Lodash还是普通JavaScript

嵌套对象的高效过滤: Lodash还是普通JavaScript
EN

Stack Overflow用户
提问于 2022-03-22 15:18:10
回答 1查看 67关注 0票数 -1

我刚开始下榻。我有一个javascript对象,如下所述。其目的是探索/学习对象的高效过滤过程,特别是在数据庞大且嵌套的情况下。我感谢你在这方面的指导。

JavaScript对象是:

代码语言:javascript
复制
{
 "Bus-1": {
 "Seat1": {
   "Bookings": {
    "21032022": {
      "BookedAt": "21/03/2022 3:43 PM",
      "BookedBy": "Jon Doe"
    },
    "22032022": {
      "BookedAt": "21/03/2022 9:43 PM",
      "BookedBy": "James"
    }
  },
  "Id": 1
},
"Seat2": {
  "Bookings": {
    "20032022": {
      "BookedAt": "21/03/2022 3:43 PM",
      "BookedBy": "Elijah"
    },
    "21032022": {
      "BookedAt": "21/03/2022 3:43 PM",
      "BookedBy": "Scott"
    }
  },
  "Id": 2
},
"Seat3": {
  "Bookings": {
    "22032022": {
      "BookedAt": "22/03/2022 02:41 AM",
      "BookedBy": "Williams"
    }
  },
  "Id": 3
}
 },
 "Bus-2": {
 "Seat1": {
  "Bookings": {
    "22032022": {
      "BookedAt": "22/03/2022 02:39 AM",
      "BookedBy": "Lucas"
    }
  },
  "Id": 1
    }
  }
}

从上面的集合中,对象层次结构如下所示。

到目前为止我尝试过的

代码语言:javascript
复制
 loop...
 Object to array and then array filter function which further leads to filtration again and again
 Object to array and then lodash filter function which also cause nested filtration again and again in this case

我想要达到的目标:

到目前为止,我发现的是循环和过滤,当有大量的数据时,会减缓这个过程。我正在寻找一个有效的方法,返回一个对象的所有预订的基础上,如以下所述,我可以进一步验证,如果用户有预订同一天或不。

代码语言:javascript
复制
    "21032022": {
      "BookedAt": "21/03/2022 3:43 PM",
      "BookedBy": "Jon Doe"
    },
    "22032022": {
      "BookedAt": "21/03/2022 9:43 PM",
      "BookedBy": "James"
    },
    "20032022": {
      "BookedAt": "21/03/2022 3:43 PM",
      "BookedBy": "Elijah"
    },
    "21032022": {
      "BookedAt": "21/03/2022 3:43 PM",
      "BookedBy": "Scott"
    },
    "22032022": {
      "BookedAt": "22/03/2022 02:41 AM",
      "BookedBy": "Williams"
    },
    "22032022": {
      "BookedAt": "22/03/2022 02:39 AM",
      "BookedBy": "Lucas"
    }

你好,Aqdas

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-22 17:00:18

这是:

代码语言:javascript
复制
const result = _.assign(..._.flatMap(val, (seats, busKey) =>
  _.flatMap(seats, (content, seatKey) =>
    _.mapKeys(content.Bookings, (_, bookingKey) =>
      _.join([busKey, seatKey, bookingKey], '_')))
))

产出如下:

代码语言:javascript
复制
{
  Bus-1_Seat1_21032022: {
    BookedAt: "21/03/2022 3:43 PM",
    BookedBy: "Jon Doe"
  },
  Bus-1_Seat1_22032022: {
    BookedAt: "21/03/2022 9:43 PM",
    BookedBy: "James"
  },
  Bus-1_Seat2_20032022: {
    BookedAt: "21/03/2022 3:43 PM",
    BookedBy: "Elijah"
  },
  Bus-1_Seat2_21032022: {
    BookedAt: "21/03/2022 3:43 PM",
    BookedBy: "Scott"
  },
  Bus-1_Seat3_22032022: {
    BookedAt: "22/03/2022 02:41 AM",
    BookedBy: "Williams"
  },
  Bus-2_Seat1_22032022: {
    BookedAt: "22/03/2022 02:39 AM",
    BookedBy: "Lucas"
  }
}

一步步地:

bookings

  • Apply

  • val上应用flatMap获取各自总线的座位和密钥,

  • 在座椅上应用flatMap以获取每个座位的内容,而其密钥

  • 在预定的位置上应用flatMap mapKeys,以避免在最终对象上发生冲突。这就是为什么我们在每个层次上提取密钥的原因。假设一个有效的输入对象,键将是唯一的。

  • 在结果上使用assign和single操作符将所有内容合并到单个对象

中。

要逆转这一过程,如下所示:

代码语言:javascript
复制
const output = {}

_.forEach(_.toPairs(result), ([key, value]) => {
  const keys = _.split(key, '_')
  _.set(output, keys, value)
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71574566

复制
相关文章

相似问题

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