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

Parsing through Array of multidimensional arrays JS and logging the indecies

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

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

问题是,当我 运行 函数 findIndex(arrayCombine) 时,它只会搜索新数组集的前两层。我知道我需要更深入地搜索一个级别并 return 现在最上面的数组的值,但我还没有找到我需要的东西。我还读到我这样做的方式可能不是最好的。开始。

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 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);
            }
        }
    }
}

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

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 语句,而对允许扫描的嵌套数组或对象的数量没有上限。

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

问题一:嵌套数组写错了,我不应该把嵌套数组中调用的变量括起来,应该写的。

var arrayCombine = [arrayOne, arrayTwo, arrayThree];

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

function 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);

        }
    }
}

}