从 Array 对象返回索引,其中 Object 包含数组

Returning the Index from a Array Object where the Object contains an array

提问人:Powl_London 提问时间:6/8/2023 最后编辑:PeterKAPowl_London 更新时间:6/9/2023 访问量:41

问:

我有以下代码(按比例缩小)来模拟卡丁车车手参加的比赛。

我最初从每个驱动程序的二维数组开始。

然后,每个车手都附加了一个 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 循环来实现这一点,但驱动程序数组可能会变得非常大,所以想知道是否有更快、更好的方法来实现这一目标。

JavaScript HTML 数组 JSON 对象

评论


答:

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