比较数组js中的数组

问题描述 投票:0回答:1

这是一个嵌套数组 [[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]])) 

javascript arrays nested
1个回答
0
投票

你可以用一个循环来解决它。通过使用

.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

© www.soinside.com 2019 - 2024. All rights reserved.