Javascript For循环内部For循环对项目进行排序
我试图在for循环中使用for循环对数组中的项进行排序,但是有些值被复制了,我似乎无法发现问题所在。我的逻辑还不成熟。我知道有排序函数,但这是学校作业的一部分,我们必须使用这两个for循环。我想要“order”键的值来确定对象的数组位置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;
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];
}
}
}