使用 Javascript 返回多维数组对象索引的最佳方式

Best way of returning indexes on a multi-dimensional array object with Javascript

提问人:S.S 提问时间:11/17/2023 更新时间:11/18/2023 访问量:66

问:

我正在尝试为一级方程式比赛创建整个赛季的得分表。每个赛季都是一个数组,该数组具有每场比赛的对象,该对象又包含参与者、车手、车号和他们的网格号。

如果我希望能够找到参加第四场比赛的所有车手的网格号,那么我想遍历车手对象并找到任何符合条件的车手,并返回车手的索引和网格数组的索引号,并将其作为数组传回。

在这种情况下,数组将返回为:

[3,1],[6,2]

因此,f1[0][0].race[0].driver[3][1] = 4 && f1[0][0].race[0].driver[6][2] = 4;

我已经研究了reduce方法,该方法有效,但在使用像f1[0][0]这样的二维数组时无法弄清楚。

我知道对于这个例子,我可以只使用一个for循环,但随着时间的推移,这个数组可能会变得更大。

f1 = [];
f1[0] = [];
f1[0][0] = {};
f1[0][0].race           = [];
f1[0][0].race[0]        = {};

for(n=0; n<=10; n++){
    f1[0][0].race[0].driver[n]  = [];
    f1[0][0].race[0].grid[n]    = [];
};

f1[0][0].race[0].driver[3]  = [2,4,6,8,10];
f1[0][0].race[0].grid[3]    = [4,9,3,2,7];

f1[0][0].race[0].driver[6]  = [1,3,4,6];
f1[0][0].race[0].grid[6]    = [3,7,2,1];

f1[0][0].race[0].driver[8]  = [2,3,8];
f1[0][0].race[0].grid[8]    = [5,4,1];

JavaScript 数组对象 reduce

评论

0赞 mplungjan 11/17/2023
请访问帮助中心参观以查看内容和如何提问。做一些研究 - 搜索 SO 寻找答案。如果您遇到困难,请发布一个最小的可重现示例,并使用 [<>] 片段编辑器记录输入和预期输出。
0赞 gog 11/17/2023
不要过早优化。除非你有数百万个条目,否则 for 循环可以正常工作。

答:

0赞 Selaka Nanayakkara 11/18/2023 #1

您提供的数据有点误导。无论如何,您可以在下面找到示例多维数组索引查找功能用法:

// Imagine you have a multidimensional array of 3x3 like below :

const multiDimensionalArray = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

function findIndexes(arr, targetValue, currentPath = []) {
    for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
            const indexes = findIndexes(arr[i], targetValue, [...currentPath, i]);
            if (indexes.length > 0) {
                return indexes;
            }
        } else if (arr[i] === targetValue) {
            return [...currentPath, i];
        }
    }
    return [];
}




let targetValue = 2; // Searching value

console.log(JSON.stringify(findIndexes(multiDimensionalArray, targetValue))); // Value 2 is in 0th row 1st column (Array indexes start with zero base)