如何从嵌套数组中获取项的索引

时间:2018-03-06 11:51:02

标签: javascript angular

如何从嵌套数组中获取项目的索引,但不知道嵌套的深度  例如    ARR = [A,并[b,[C],[d],E]中,f,[G]中,h]

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么您正试图获取index例如值g

我创建了一个小脚本,通过数组和可能嵌套的数组进行迭代,如果找到了正确的value,则返回index

以下是数组的屏幕截图,其中包含函数getIndexOfValue返回的键。

enter image description here



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




它可能仍然包含错误,我在几分钟内快速创建了它。

答案 1 :(得分:0)

为获取完整路径,您可以对嵌套数组使用迭代和递归方法。

结果是一个包含所有索引的数组。



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