javascript - for 循环内的 for 循环对项目进行排序

标签 javascript arrays json

我试图在 for 循环内使用 for 循环来对数组中的项目进行排序,但有些值会重复,而且我似乎无法发现问题所在。我的逻辑还没有高度发达。我知道有排序函数,但这是学校作业的一部分,我们必须使用两个 for 循环。我想要“order”键的值来确定对象的数组位置。

 var connection = await fetch('momondo.php')
  var jData = await connection.json()
  var aScheduleInOrder = jData
  for (var i = 0; i < jData.length; i++) {           

    for (var j = 0; j < jData[i].schedule.length; j++) {

      aScheduleInOrder[i].schedule[jData[i].schedule[j].order] = jData[i].schedule[j]
    }
  }

这是 jData 中的 json 对象:

[  
  {     
  "currency":"DKK",
  "price":3000,
  "schedule":
  [    
    {"airlineIcon":"LH.png", "date":1581513600,"id":"SAS22","from":"C", "to":"D","waitingTime":120,"flightTime":240,"order":2},
    {"airlineIcon":"KL.png","date":1581510000, "id":"SAS33","from":"B", "to":"C","waitingTime":60,"flightTime":180,"order":1},
    {"airlineIcon":"DY.png","date":1581501600,"id":"SAS1","from":"A", "to":"B","waitingTime":0,"flightTime":80,"order":0}
  ]
},

{   
  "currency":"DKK",
  "price":5000,
  "schedule":
  [
    {"airlineIcon":"LX.png", "date":1581513600,"id":"SAS55","from":"B", "to":"C","waitingTime":120,"flightTime":240,"order":1},
    {"airlineIcon":"SK.png","date":1581501600,"id":"SAS44","from":"A", "to":"B","waitingTime":0,"flightTime":80,"order":0}

  ]
},

{     
  "currency":"DKK",
  "price":15000,
  "schedule":
  [
    {"airlineIcon":"AC.png","date":1581501600,"id":"SAS78","from":"A", "to":"B","waitingTime":0,"flightTime":80,"order":0}
  ]
}    
]

在数组中的位置 [1] 处,在调度数组内,第一个项目在位置 [0] 处有一个名为“order”的键,其值为 1。这应该根据我的逻辑,其中两个为循环,移动到位置 [1],并且位置 [1] 处的第二个项目应该移动到位置 [2] 等。这就是它之后的样子:

[  
  {     
  "currency":"DKK",
  "price":3000,
  "schedule":
  [
    {"airlineIcon":"DY.png","date":1581501600,"id":"SAS1","from":"A", "to":"B","waitingTime":0,"flightTime":80,"order":0},
    {"airlineIcon":"KL.png","date":1581510000, "id":"SAS33","from":"B", "to":"C","waitingTime":60,"flightTime":180,"order":1},
    {"airlineIcon":"LH.png", "date":1581513600,"id":"SAS22","from":"C", "to":"D","waitingTime":120,"flightTime":240,"order":2}
  ]
},

{   
  "currency":"DKK",
  "price":5000,
  "schedule":
  [
    {"airlineIcon":"SK.png","date":1581501600,"id":"SAS44","from":"A", "to":"B","waitingTime":0,"flightTime":80,"order":0},
    {"airlineIcon":"LX.png", "date":1581513600,"id":"SAS55","from":"B", "to":"C","waitingTime":120,"flightTime":240,"order":1}
  ]
},

{     
  "currency":"DKK",
  "price":15000,
  "schedule":
  [
    {"airlineIcon":"AC.png","date":1581501600,"id":"SAS78","from":"A", "to":"B","waitingTime":0,"flightTime":80,"order":0}
  ]
}      
]

希望大家能帮助我:)

最佳答案

好的,清楚了,您只想对 order 属性进行排序,而不是对数组内的项目进行排序?然后在第二个嵌套循环中添加以下内容

aScheduleInOrder[i].schedule[j].order = j;

而不是

aScheduleInOrder[i].schedule[jData[i].schedule[j].order] = jData[i].schedule[j]

编辑:原始问题更改后,特此提供新答案。请尝试此代码,它将从头开始创建新数组,在原始数组中查找正确的调度顺序。从教师的 Angular 来看也非常可读:

for (var i = 0; i < jData.length; i++) {

    var currency = jData[i].currency;
    var price = jData[i].price;
    var schedule = [];

    var data = {
        "currency": currency,
        "price":    price,
        "schedule" : []
    };

    for (var j = 0; j < jData[i].schedule.length; j++) {
        data.schedule[j] = getScheduleByOrder(jData[i].schedule,j);
    }

    aScheduleInOrder.push(data);
}

function getScheduleByOrder(scheduleArray,order){

    for (var k = 0; k < scheduleArray.length; k++) {
        if (scheduleArray[k].order === order){
            return scheduleArray[k];            
        }
    }   
}

关于javascript - for 循环内的 for 循环对项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60185555/

相关文章:

java - 多维数组操作 - Java

java - 数组内的除数

c - C语言删除数组中多个元素的算法

jquery - 将 Json append 到 div

javascript - 无法使用点或方括号表示法来访问 json/javascript 对象中的键或数据,该对象在获取后保存到状态

javascript - Angular JS,从 json ionic 读取

php - 我们如何在用户使用javascript登录时强制删除缓存

javascript - 使用 Chrome 开发者工具编辑 Javascript

javascript - 将 UI 元素与 DOM 解耦以独立拖动它们

javascript - oTree/django 中的强制 slider