如何从嵌套数组中获取项目的索引,但不知道嵌套的深度,例如arr = [a,[b,[c],[d],e],f,[g],h]
如果我正确地理解了你的问题,你试图获得index
例如值g
。
我创建了一个小脚本,通过数组迭代,可能嵌套数组,如果找到正确的value
返回index
。
这是一个数组的屏幕截图,其中包含getIndexOfValue
函数返回的键。
var arr = [
"a",
[
"b",
[
"c"
],
[
"d"
],
"e"
],
"f",
[
"g"
],
"h"
]
function getIndexOfValue(haystack, needle) {
for(i in haystack) {
if(haystack[i] instanceof Array) {
result = getIndexOfValue(haystack[i], needle);
if(result) {
return result;
}
}
else if(haystack[i] == needle) {
return i;
}
}
return false;
}
var indexOfA = getIndexOfValue(arr, "a");
var indexOfB = getIndexOfValue(arr, "b");
var indexOfC = getIndexOfValue(arr, "c");
var indexOfD = getIndexOfValue(arr, "d");
var indexOfE = getIndexOfValue(arr, "e");
var indexOfF = getIndexOfValue(arr, "f");
var indexOfG = getIndexOfValue(arr, "g");
var indexOfH = getIndexOfValue(arr, "h");
console.log(indexOfA); //0
console.log(indexOfB); //0
console.log(indexOfC); //0
console.log(indexOfD); //0
console.log(indexOfE); //3
console.log(indexOfF); //2
console.log(indexOfG); //0
console.log(indexOfH); //4
它可能仍然包含错误,我在几分钟内快速创建了它。
要获取完整路径,可以对嵌套数组使用迭代和递归方法。
结果是一个包含所有索引的数组。
function findPath(array, value) {
var path = [];
array.some(function iter(p) {
return function (a, i) {
if (a === value) {
path = p.concat(i);
return true;
}
if (Array.isArray(a)) {
return a.some(iter(p.concat(i)));
};
};
}([]));
return path;
}
var array = ['a', ['b', ['c'], ['d'], 'e'], 'f', ['g'], 'h'];
console.log(findPath(array, 'a'));
console.log(findPath(array, 'b'));
console.log(findPath(array, 'c'));
console.log(findPath(array, 'd'));
console.log(findPath(array, 'e'));
console.log(findPath(array, 'f'));
console.log(findPath(array, 'g'));
console.log(findPath(array, 'h'));
.as-console-wrapper { max-height: 100% !important; top: 0; }