解析多维数组JS的数组并记录索引
Parsing through Array of multidimensional arrays JS and logging the indecies
我有三个多维数组。如果我将最后一行设置为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);
}
}
}
}
相关文章:
- 在记录数组搜索后追加变量和数组项
- 在对象数组中添加具有相同名称的产品记录的价格
- 从Javascript记录数组中选择随机项,并将其转换为数组
- 解析多维数组JS的数组并记录索引
- Javascript如何找到数组中的最大数字,并记录位置
- 如何在js中从数组中删除记录
- Ember - 绑定到数组控制器中的过滤列表,然后添加新记录
- jQuery:记录数组中的元素变化,并通过索引检查它是如何变化的
- 异步瀑布返回节点 js 和 mongodb 中数组的单个记录
- 将对象数组记录为 JSDoc 中回调函数的参数
- Javascript 从 JSON 数组中提取特定记录
- 使用单个查询将多个记录插入到 webSQL 表中,来自对象数组的数据
- 根据内部数组值跳过 JSON 数据记录 - D3
- 将输入记录到数组中,仅打印新输入
- 如何将数据库表记录转换为 javascript 数组
- 在mongoDb中,如果字符串输入与任何数组元素匹配,如何获取整个记录(在这种情况下,数组是记录的属性)
- 使用JavaScript&使用数组记录错误
- Jquery/javascript计算数组记录的问题
- 如何在JSDoc中将对象数组记录为参数
- 在ember.js中删除数组记录的正确方法