解析多维数组JS的数组并记录索引

Parsing through Array of multidimensional arrays JS and logging the indecies

本文关键字:数组 记录 索引 JS      更新时间:2023-09-26

我有三个多维数组。如果我将最后一行设置为findIndex(arrayTwo),函数findIndex将遍历其中一个数组,并吐出项目和索引变量,告诉我变量idName在哪里。

示例:如果我调用findIndex(arrayTwo),它将控制台日志项:2|index:1http://jsfiddle.net/vap03jfL/

问题是,当我运行函数findIndex(arrayCombine)时,它将只搜索新数组集的前两个级别。我知道我需要更深入地搜索一个级别,并为现在最顶部的数组返回一个值,但我还没有找到我需要的。我也读到我这样做的方式可能不是最好的。首先。

var arrayOne = [
    ["a", "b", "c", "d"],
    ["e", "f", "g", "h"],
    ["i", "j", "k", "l"],
    ["m", "n", "o", "p"]
];
var arrayTwo = [
    ["Z1", "Y1", "X2", "W2"],
    ["V2", "U3", "T3", "S3"],
    ["R3", "Q3", "P3", "O3"],
    ["N4", "M2", "L2", "K2"]
];
var arrayThree = [
    ["Z", "Y", "X", "W"],
    ["V", "U", "T", "S"],
    ["R", "Q", "P", "O"],
    ["N", "M", "L", "K"]
];
var arrayCombine = [
    [arrayOne],
    [arrayTwo],
    [arrayThree]
]

function findIndex(arrayArg) {
    idName = "Q3";
    for (var item in arrayArg) {
        console.log("item: " + item);
        if (arrayArg[item].indexOf(idName)) {
            var index = arrayArg[item].indexOf(idName);
            console.log("index: " + index);
            if (index != -1) {
                console.log("item found: " + item);
                console.log("index found: " + index);
                break;
            }
        }
    }
}
findIndex(arrayCombine);

如有任何帮助,我们将不胜感激。非常感谢。

您需要使函数递归以处理深度搜索。

function findIndex(arrayArg, idName) {
    for (var item in arrayArg) {
        if (typeof arrayArg[item] == "object" && arrayArg[item] != null) {
            if (findIndex(arrayArg[item], idName)) {
                return true
            }
        } else {
            var index = arrayArg[item].indexOf(idName)
            if (index != -1) {
                console.log("item found: " + item);
                console.log("index found: " + index);
                return true;
            } else { 
                console.log(arrayArg[item] + " != " + idName);
            }        
        }
    }
    return false;
}
findIndex(arrayCombine, "Q3");

您可以使用递归性的力量进行深度搜索,而不必在if语句内部的循环中嵌套if语句,对允许扫描的嵌套数组或对象的数量没有上限。

function findIndex(arrayArg, idName) {
    for (var i in arrayArg) {
        console.log("item: " + item);
        var item = arrayArg[i];
        if(item instanceof Array) {
            if(findIndex(item, idName)) {
               return true;
            }
        } else if (item.indexOf(idName)) {
            var index = item.indexOf(idName);
            console.log("index: " + index);
            if (index != -1) {
                console.log("item found: " + item);
            }
        }
    }
}

这是我提出的解决方案。http://jsfiddle.net/vap03jfL/7/

问题1:嵌套数组写得不正确,我不应该把嵌套数组中调用的变量括起来,它应该已经写好了。

var arrayCombine = [arrayOne, arrayTwo, arrayThree];

问题2:我需要解析另一个级别。。这是一个略有不同的策略,但也适用于锯齿状数组。

函数findIndex(arrayArg){idName="Q3";

for (var arrayId = 0; arrayId < arrayArg.length; arrayId++) {
    for (var item = 0; item < arrayArg[arrayId].length; item++) {
        var index = arrayArg[arrayId][item].indexOf(idName);
        if (index >= 0) {
            console.log("arrayId " + arrayId + " | item: " + item + " | Found Index! " + index);
        }
    }
}

}