如何找到三维数组的索引

时间:2017-07-14 04:04:59

标签: javascript

我看过这篇文章:To find Index of Multidimensional Array in Javascript

我喜欢这个答案,但我正在尝试将其扩展到三维数组。这就是我到目前为止所拥有的。任何帮助将不胜感激。

/**
* Index of Multidimensional Array
* @param a1,a2 {!Array} - the input arrays
* @param k {object} - the value to search
* @return {Array} 
*/
function getIndexOfK(a1, a2, k) {
  for (var i = 0; i < arr.length; i++) {
    for (j=0; j<a2.length;j++){
        var index = arr[i][j].indexOf(k); 
        if (index > -1) {
            return [i, j, index];
        }
     }
   }
}

4 个答案:

答案 0 :(得分:1)

修改后的Fiddle

你不需要在函数参数上使用第二个数组,你只需要深入研究第三个维度:

org_dict={'k3': [5, 6], 'k2': [3, 2], 'k1': [1, 2]}
filter_data=[[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 0]]

答案 1 :(得分:0)

三维数组本质上是一个单独的数组。您的输出必须是3个整数的数组,就像您正确完成的那样。

header("Location : ".$filename);

}

尝试https://jsfiddle.net/ygo7o6w1/

答案 2 :(得分:0)

为什么要停在三个方面?我创建了一个递归函数,它只接受一个任何维数的数组,并递归调用自己找到最浅值的路径来查找。

&#13;
&#13;
function getIndexPathOf(arr, k) {
  // If we're not array, return null;
  if (!Array.isArray(arr))
    return null;
  
  // If our item is directly within our current
  // array, return it's index as an array.
  var shallowIndex = arr.indexOf(k);
  if (shallowIndex > -1)
    return [shallowIndex];
  
  // Search through our current array, recursively
  // calling our getIndexPathOf with the current value.
  for (var i = 0, l = arr.length; i < l; i++) {
    var path = getIndexPathOf(arr[i], k);
    if (path != null) {
      // If we found the path, prepend the current index
      // and return.
      path.unshift(i);
      return path;
    }
  }
  
  // If nothing was found, return null.
  return null;
}


console.log(getIndexPathOf([1, 2, 3], 3)); // [2]
console.log(getIndexPathOf([1, 2, 3], 4)); // null
console.log(getIndexPathOf([1, 2, ['A', [0, 10, 20, [3, 6]], 'B'], 4, 5], 3)); // [2, 1, 3, 0]
console.log(getIndexPathOf([1,[2],[[3]],[[[4]]],[[[[5]]]]], 5)); // [4, 0, 0, 0, 0]
&#13;
&#13;
&#13;

答案 3 :(得分:0)

尝试这种功能性方法:

&#13;
&#13;
const mda = [
  [
    [1, 2],
    [3, 4]
  ],
  [
    [5, 6],
    [7, 8]
  ],
  [
    [9, 10],
    [11, 12]
  ]
]

const findIt = (arr, t) => arr.reduce((a, e, i) => a || e.reduce((a1, e1, j) => {
  if (a1) return a1
  const index = e1.indexOf(t)
  if (index >= 0) return [i, j, index]
}, null), null)

console.log(findIt(mda, 10))
&#13;
&#13;
&#13;