json 返回数组对象中包含数组的索引

jv2fixgn  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(132)

我有下面的代码(按比例缩小),它模拟了卡丁车车手参加的比赛。
我首先为每个驱动程序创建一个二维数组。
然后,每个驱动程序都有一个附加到它的对象数组,该数组具有竞争的回合。
如何搜索“round”对象数组并返回驱动程序的索引和round的索引。
这是一个按比例缩小的版本,但到最后他们将添加更多的数据,所以犹豫使用for/next循环;

**例如:**我想搜索每个.round对象数组,并返回一个数组,其中包含驱动程序的索引和.round对象的索引,如果它们在第10轮比赛;

在这种情况下,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循环来实现这一点,但驱动程序数组可能会变得非常大,所以想知道是否有更快更好的方法来实现这一点。

a2mppw5e

a2mppw5e1#

这里有一种方法可以做到这一点:

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]]

相关问题