这是一个嵌套数组 [[1,5], [2,4], [6,8], [7,7]],我需要将每个项目的第二个索引(出发)与以下项目的第一个索引进行比较(到达)像这样: 5 >= 2, 4 >= 6, 8 >= 7 最后 7 >= 1.
另一方面,我的代码仅比较一次(因此 [1,5] 和 [2,4])并忽略其余部分。
请不要介意其余的代码;这实际上没有意义,因为它只是一个草稿,现在我只需要知道如何连续比较客户(出发)和(到达)时间。我正在考虑使用 while 循环而不是 if 语句,但我不断收到“致命错误:javascript 堆内存不足”...
function allocateRooms(c){
let s = c.sort((a,b) => a[0] - b[0])
let rooms = [];
for(let i=0; i<s.length; i++){
for(let j=i+1; j<s[i].length; j++){
let depart = s[i][1];
let arrive = s[j][0];
if(depart >= arrive){
rooms.push(s.indexOf(s[i]) + 1)
rooms.push(s.indexOf(s[j]) + 1)
} else {
rooms.push(0)
}
}
}
return rooms
}
console.log(allocateRooms([[1,5], [2,4], [6,8], [7,7]]))
你可以用一个循环来解决它。通过使用
.sort()
,您走在正确的道路上,但不用使用两个循环,一个循环就足够了。您只需迭代数组并将当前的离开与下一个项目的到达进行比较。
function allocateRooms(c) {
let s = c.sort((a, b) => a[0] - b[0]);
let rooms = [];
for (let i = 0; i < s.length - 1; i++) {
let depart = s[i][1];
let arrive = s[i + 1][0];
if (depart >= arrive) {
rooms.push([i + 1, i + 2]);
} else {
rooms.push(0);
}
}
return rooms;
}
console.log(allocateRooms([[1, 5], [2, 4], [6, 8], [7, 7]]));
因此,如果您的出发时间大于到达时间,它会将当前和下一个项目推送到房间数组,否则它将推送
0
。