Javascript 为什么数组的顺序在for循环中不断变化
我正在运行以下代码(我认为这些代码有些重复,需要整理):Javascript 为什么数组的顺序在for循环中不断变化,javascript,Javascript,我正在运行以下代码(我认为这些代码有些重复,需要整理): 正如您所看到的(请参阅requestee和priority属性),当它到达nameOfRequestsArray[26]时,数组的顺序似乎在改变,即使i仍然=26。我认为数组的意义在于,除非通过执行.sort或.reverse显式更改顺序,否则数组中的数据将保持相同的顺序?这导致了我以前从未遇到过的执行问题。由于translateRequests是一个异步函数,调用它的函数应该在调用下一个函数之前等待它完成(在我的例子中,是对数组排序的函
正如您所看到的(请参阅requestee和priority属性),当它到达nameOfRequestsArray[26]时,数组的顺序似乎在改变,即使i仍然=26。我认为数组的意义在于,除非通过执行.sort或.reverse显式更改顺序,否则数组中的数据将保持相同的顺序?这导致了我以前从未遇到过的执行问题。由于translateRequests是一个异步函数,调用它的函数应该在调用下一个函数之前等待它完成(在我的例子中,是对数组排序的函数)这就是为什么数组中的内容在调用
translateRequests
时发生了变化,它的参数来自哪里?如果您的代码中有一个wait
,那么您可能在代码的其他地方更改了相同的数组。请提供一个数组,以便我们可以测试您的代码,这样与问题无关的任何代码都不会陷入问题。啊!是调用函数在运行排序函数之前没有等待translateRequests完成!一个简单的等待修复了这个问题和我以前的问题!我将把它作为一个参考答案,以避免在类似情况下混淆其他人
async function translateRequests(nameOfRequestsArray) {
document.body.style.cursor = "wait";
for (let i = 0; i < nameOfRequestsArray.length; i++) {
//see if nameOfRequestsArray[i] has been translated already and if it has then skip it!
if (nameOfRequestsArray[i].lastUpdated.length != 3) {
//translate requesters
let a = users.map(function(search) { return search.id; }).indexOf(nameOfRequestsArray[i].requester);
nameOfRequestsArray[i].requesterFirstName = users[a].firstName;
nameOfRequestsArray[i].requesterSurname = users[a].surname;
//translate requestees
console.log(nameOfRequestsArray[i]);
console.log('i1: ' + i);
if (nameOfRequestsArray[i].type == 'user') {
let b = users.map(function(search) { return search.id; }).indexOf(nameOfRequestsArray[i].requestee);
nameOfRequestsArray[i].requesteeFirstName = users[b].firstName;
nameOfRequestsArray[i].requesteeSurname = users[b].surname;
} else if (nameOfRequestsArray[i].type == 'team') {
//get teams if they haven't already been downloaded
if (teams.length == 0) {
//get teams
data = JSON.stringify({"active": true});
teams = await makeRequest("POST", "http://127.0.0.1:7071/retrieveteams", data);
console.log(JSON.stringify(teams), nameOfRequestsArray[i].requestee)
}
console.log(nameOfRequestsArray[i]);
console.log('i2: ' + i);
let d = teams.map(function(search) { return search.id; }).indexOf(nameOfRequestsArray[i].requestee);
nameOfRequestsArray[i].requesteeFirstName = teams[d].teamName;
}
//translate categories
let c = categories.map(function(search) { return search.id; }).indexOf(nameOfRequestsArray[i].categoryId);
nameOfRequestsArray[i].categoryName = categories[c].name;
//split up lastUpdated dates
let z = Date.parse(nameOfRequestsArray[i].lastUpdated) - timezoneOffset;
z = new Date(z).toISOString();
nameOfRequestsArray[i].lastUpdated = z.replace('Z','').split('T');
nameOfRequestsArray[i].lastUpdated[2] = nameOfRequestsArray[i].lastUpdated[0].split('-').reverse().join('-');
z = nameOfRequestsArray[i].lastUpdated[2].split('-');
z[1] = z[1].replace('01','Jan');
z[1] = z[1].replace('02','Feb');
z[1] = z[1].replace('03','Mar');
z[1] = z[1].replace('04','Apr');
z[1] = z[1].replace('05','May');
z[1] = z[1].replace('06','Jun');
z[1] = z[1].replace('07','Jul');
z[1] = z[1].replace('08','Aug');
z[1] = z[1].replace('09','Sep');
z[1] = z[1].replace('10','Oct');
z[1] = z[1].replace('11','Nov');
z[1] = z[1].replace('12','Dec');
nameOfRequestsArray[i].lastUpdated[2] = z.join('-');
//translate updates
for (let x in nameOfRequestsArray[i].updates) {
let d = users.map(function(search) { return search.id; }).indexOf(nameOfRequestsArray[i].updates[x].author);
nameOfRequestsArray[i].updates[x].authorFirstName = users[d].firstName;
nameOfRequestsArray[i].updates[x].authorSurname = users[d].surname;
//translate the update dates
let y = Date.parse(nameOfRequestsArray[i].updates[x].date) - timezoneOffset;
y = new Date(y).toISOString();
nameOfRequestsArray[i].updates[x].date = y.replace('Z','').split('T');
nameOfRequestsArray[i].updates[x].date[0] = nameOfRequestsArray[i].updates[x].date[0].split('-').reverse().join('-');
y = nameOfRequestsArray[i].updates[x].date[0].split('-');
y[1] = y[1].replace('01','Jan');
y[1] = y[1].replace('02','Feb');
y[1] = y[1].replace('03','Mar');
y[1] = y[1].replace('04','Apr');
y[1] = y[1].replace('05','May');
y[1] = y[1].replace('06','Jun');
y[1] = y[1].replace('07','Jul');
y[1] = y[1].replace('08','Aug');
y[1] = y[1].replace('09','Sep');
y[1] = y[1].replace('10','Oct');
y[1] = y[1].replace('11','Nov');
y[1] = y[1].replace('12','Dec');
nameOfRequestsArray[i].updates[x].date[2] = y.join('-');
}
}
}
document.body.style.cursor = "initial";
}
{type: "team", requester: "2f3e7466-28c7-1c90-cfaf-3dc8370d5dd3", requestee: "88edea02-f145-d79f-f077-e2b6a5db8972", categoryId: "2cb42736-f243-dacb-9961-9e007dc51f29", priority: 1, …}
javascript.js:135 i1: 26
javascript.js:208 type: undefined
javascript.js:146 [{"teamName":"Alpha 1","id":"88edea02-f145-d79f-f077-e2b6a5db8972"}] 2f3e7466-28c7-1c90-cfaf-3dc8370d5dd3
javascript.js:148 {type: "user", requester: "2f3e7466-28c7-1c90-cfaf-3dc8370d5dd3", requestee: "2f3e7466-28c7-1c90-cfaf-3dc8370d5dd3", categoryId: "2cb42736-f243-dacb-9961-9e007dc51f29", priority: 2, …}
javascript.js:149 i2: 26