提问人:Powl_London 提问时间:6/8/2023 最后编辑:PeterKAPowl_London 更新时间:6/9/2023 访问量:41
从 Array 对象返回索引,其中 Object 包含数组
Returning the Index from a Array Object where the Object contains an array
问:
我有以下代码(按比例缩小)来模拟卡丁车车手参加的比赛。
我最初从每个驱动程序的二维数组开始。
然后,每个车手都附加了一个 Object 数组,用于进行回合竞争。
如何搜索“round”对象数组并同时返回驱动程序的索引和轮的索引。
这是一个缩小的版本,但到最后,它们将添加更多的数据,因此犹豫使用 for/next 循环;
例如:我想搜索每个 .round 对象数组并返回一个数组,其中包含车手的索引和 .round 对象的索引(如果他们在第 10 轮中比赛);
在这种情况下,将返回值 driver 将返回值,并将返回新数组中的值;driver[0][1]
[[1][4]];
[[0][3]]
[[3][3]]
driver[5]
[[5][1]]
driver = [];
driver[0] = [];
for(n=0; n<=5; n++){
driver[0][n] = new Object();
driver[0][n].id = "Driver: "+n;
driver[0][n].round = new Array();
}
driver[0][0].round = [0];
driver[0][1].round = [1,3,5,7,10];
driver[0][2].round = [1,2,4];
driver[0][3].round = [5,7,8,10,12,14];
driver[0][4].round = [6,11,12];
driver[0][5].round = [4,10,11,12];
提前致谢。
我可以通过 for/next 循环来实现这一点,但驱动程序数组可能会变得非常大,所以想知道是否有更快、更好的方法来实现这一目标。
答:
0赞
CalPal
6/9/2023
#1
这是您可以做到的一种方法:
driver = [];
driver[0] = [];
for(n=0; n<=5; n++){
driver[0][n] = new Object();
driver[0][n].id = "Driver: "+n;
driver[0][n].round = new Array();
}
driver[0][0].round = [0];
driver[0][1].round = [1,3,5,7,10];
driver[0][2].round = [1,2,4];
driver[0][3].round = [5,7,8,10,12,14];
driver[0][4].round = [6,11,12];
driver[0][5].round = [4,10,11,12];
const getRound = (driverIndex, round) => {
const roundIndex = driver[0][driverIndex].round.indexOf(round);
return [[driverIndex], [roundIndex >= 0 ? roundIndex : null]];
}
console.log(getRound(0, 10)) // [[0], [null]]
console.log(getRound(1, 10)) // [[1], [4]]
console.log(getRound(2, 10)) // [[2], [null]]
console.log(getRound(3, 10)) // [[3], [3]]
我可能会尝试以不同的方式存储驱动程序数据,例如将驱动程序存储在以驱动程序的 ID 为键的键/值对象中,以便于访问。我想如果驱动程序的 ID 始终与它们的索引相同,这并不重要,但将它们存储在键/值对象中对我来说更有意义。
编辑: 如果您需要整轮的所有指数 ->
const getRounds = (driverIndex, round) => {
const roundIndices = [];
i = -1;
while ((i = driver[0][driverIndex].round.indexOf(round, i+1)) != -1){
roundIndices.push(i);
}
return [[driverIndex], roundIndices];
}
console.log(getRound(3, 10)) // [[3], [3, 6]]
评论
0赞
Powl_London
6/9/2023
谢谢。如果其中一个驱动程序数组有两个值 10,则出于兴趣。即,driver[0][3].round=[5,10,7,10,12,14] 我将如何返回值,使其为 = 5,2,4?
0赞
CalPal
6/9/2023
在我的第一个答案中,犯了一个小错别字,应该是 roundIndex >= 0(因为该轮可能在第一个索引中)
0赞
CalPal
6/9/2023
已编辑以包含获取所有索引的函数。
0赞
Powl_London
6/9/2023
那太完美了。感谢您抽出宝贵时间接受采访。
0赞
CalPal
6/9/2023
没问题,别忘了将其标记为已回答 <3
评论