Javascript For循环内部For循环对项目进行排序

Javascript For循环内部For循环对项目进行排序,javascript,arrays,json,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;

我试图在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]
    }
  }
在数组中的位置[1],在调度数组中的位置[0]处的第一个项有一个名为“order”的键,其值为1。根据我的逻辑,这应该是两个for循环,移动到位置[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}
  ]
}      
]

我希望你们能帮助我:)

为什么不使用
.sort()
数组方法呢? 编辑:aaah
这是学校作业的一部分,我们必须使用两个for循环。
学校作业FTW

让jData=[{
“货币”:“丹麦克朗”,
“价格”:3000美元,
“附表”:[{
“airlineIcon”:“SK.png”,
“日期”:1581501600,
“id”:“SAS1”,
“发件人”:“A”,
“至”:“B”,
“waitingTime”:0,
“飞行时间”:80,
“订单”:0
},
{
“airlineIcon”:“KL.png”,
“日期”:1581510000,
“id”:“SAS33”,
“发件人”:“B”,
“至”:“C”,
“等待时间”:60,
“飞行时间”:180,
“订单”:1
},
{
“airlineIcon”:“LH.png”,
“日期”:1581513600,
“id”:“SAS22”,
“from”:“C”,
“致”:“D”,
“等待时间”:120,
“飞行时间”:240,
“命令”:2
}
]
},
{
“货币”:“丹麦克朗”,
“价格”:5000美元,
“附表”:[{
“airlineIcon”:“SK.png”,
“日期”:1581501600,
“id”:“SAS1”,
“发件人”:“A”,
“至”:“B”,
“waitingTime”:0,
“飞行时间”:80,
“订单”:1
},
{
“airlineIcon”:“LH.png”,
“日期”:1581513600,
“id”:“SAS22”,
“发件人”:“B”,
“至”:“C”,
“等待时间”:120,
“飞行时间”:240,
“订单”:0
}
]
},
{
“货币”:“丹麦克朗”,
“价格”:15000美元,
“附表”:[{
“airlineIcon”:“SK.png”,
“日期”:1581501600,
“id”:“SAS1”,
“发件人”:“A”,
“至”:“B”,
“waitingTime”:0,
“飞行时间”:80,
“订单”:0
}]
}
];
jData=jData.map(obj=>{
obj.schedule.sort((a,b)=>a.order>b.order?1:-1);//按“order”键升序排序
返回obj;
})

log(jData)
好的,请清除,您只想排序order属性,而不是排序数组中的项目?然后在第二个嵌套循环中添加以下内容

aScheduleInOrder[i].schedule[j].order = j;
而不是

aScheduleInOrder[i].schedule[jData[i].schedule[j].order] = jData[i].schedule[j]
编辑:原问题修改后,特此给出新答案。请尝试此代码,它将从头开始创建新阵列,并在原始阵列中查找正确的调度顺序。从教师的角度来看,也非常可读:

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];            
        }
    }   
}
for(var i=0;i
是的,我希望我能使用排序函数xd。在现实生活中,对于实际工作,我们会使用
.sort()
函数<代码>for循环不用于排序。学校和他们无关的作业。是的,你是绝对正确的。但我也希望理解,如果这有意义的话,为什么这不能发展我的逻辑:)不,对不起,我的错,我只是为了说明的目的快速更改了“订单”编号。我已经编辑好再次发布。我希望对象的“order”值确定对象在数组中的位置。很抱歉我解释得不好。这对我来说太复杂了:)啊,好吧,那么问题是你正在改变迭代的顺序。i、 j=0.0变为0.1,然后在j到0.1的下一次迭代中,它将保持为0.1,因为它在上一次迭代中被更改。很快就会得到答案!只需添加一个console.log,如:console.log(“将“+ASScheduleInoder[i].schedule[j].airlineIcon+”的顺序从“+i+”+j+”更改为“+i+”+jData[i].schedule[j].order);看看我说的发生了什么。。
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];            
        }
    }   
}