解析多维数组 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);
}
}
}
}
我有三个多维数组。 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);
}
}
}
}