【发布时间】:2020-08-09 23:11:07
【问题描述】:
我正在尝试遍历对象内部的对象数组,并根据提供的 startTime 和 endTime 返回可用的办公桌。每个服务台都保留不应与提供的开始和结束时间重叠的预订。但是,当我遍历它时,如果数组中的最后一张桌子与提供的数据不冲突,代码只会返回一张桌子。如果它与最后一个元素冲突,则返回 undefined。
const org = {
id: '123',
name: 'apple',
numofDesks: 12,
desks: [
{
deskID: '1',
bookings: [
{
id: '123',
date: {
day: 14,
month: 02,
year: 1999,
},
startTime: 14,
finishTime: 16,
},
{
id: '123',
date: {
day: 14,
month: 02,
year: 1999,
},
startTime: 17,
finishTime: 20,
},
],
deskID: '2',
bookings: [
{
id: '123',
date: {
day: 14,
month: 02,
year: 1999,
},
startTime: 11,
finishTime: 12,
},
{
id: '123',
date: {
day: 14,
month: 02,
year: 1999,
},
startTime: 8,
finishTime: 10,
},
],
},
],
};
const booking = {
startTime: 8,
finishTime: 11,
};
const avaliableDesks = org.desks.find(({ bookings }) =>
bookings.every(
({ startTime, finishTime }) =>
//checks if the start&end times overlap with the existing booking
!(booking.startTime <= finishTime && startTime <= booking.finishTime),
),
);
【问题讨论】:
-
booking在哪里定义,它的值是多少? -
您可以使用
filter返回所有符合条件的办公桌(而不是find):developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
desks数组只包含一个对象。但是这个对象已经分配了两次deskId和bookings...我认为对象结构不正确。 -
^ 这个。缺少
], [!因此,并不是代码仅在 last 元素正常的情况下才有效,而是如果 only 元素正常,因为只有一个(具有第二个的值定义,因为定义同名属性两次将使用最后一个值)! -
@PeterSeliger 谢谢。我花了大约 2 个小时试图弄清楚这一点......
标签: javascript