我试图在 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/