我刚开始下榻。我有一个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
}
}
}从上面的集合中,对象层次结构如下所示。

到目前为止我尝试过的
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我想要达到的目标:
到目前为止,我发现的是循环和过滤,当有大量的数据时,会减缓这个过程。我正在寻找一个有效的方法,返回一个对象的所有预订的基础上,如以下所述,我可以进一步验证,如果用户有预订同一天或不。
"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
发布于 2022-03-22 17:00:18
这是:
const result = _.assign(..._.flatMap(val, (seats, busKey) =>
_.flatMap(seats, (content, seatKey) =>
_.mapKeys(content.Bookings, (_, bookingKey) =>
_.join([busKey, seatKey, bookingKey], '_')))
))产出如下:
{
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
val上应用flatMap获取各自总线的座位和密钥,
flatMap以获取每个座位的内容,而其密钥
flatMap mapKeys,以避免在最终对象上发生冲突。这就是为什么我们在每个层次上提取密钥的原因。假设一个有效的输入对象,键将是唯一的。
assign和single操作符将所有内容合并到单个对象中。
要逆转这一过程,如下所示:
const output = {}
_.forEach(_.toPairs(result), ([key, value]) => {
const keys = _.split(key, '_')
_.set(output, keys, value)
})https://stackoverflow.com/questions/71574566
复制相似问题