在Javascript中查找多维数组的索引

11

我在JavaScript中创建了一个多维数组,我想找到特定值的确切索引。该值将由用户输入。

var array = [];
var k = 0;
for (var i = 0; i < 10; i++) {
  array[i] = [];
  for (var j = 0; j < 100; j++) {
    k = k + 1
    array[i].push(k);
  }
}
var index = array.indexOf(`**"What to insert here???"**`);

你必须迭代元素以查找嵌套值。 - VisioN
4
k是什么?目前,上面的代码会导致错误,因为您试图读取k的值,但是现在并没有声明k - T.J. Crowder
1
t-j-crowder: k 是一个全局变量,其值被设置为 0。 - Rayon
http://stackoverflow.com/about - Xotic750
你尝试了什么?它们为什么/怎么没起作用?请查看每个页面顶部链接的SO帮助部分中的主题,以获取有关在SO上提出有效问题所需信息的详细信息。 - SherylHohman
@SherylHohman - 我在2013年4月19日问过这个问题,不知道是什么引发了这条评论。 - Rayon
7个回答

27

JSFiddle

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

// Generate Sample Data
var k = 0;
var array = [];
for (var i = 0; i < 10; i++) {
  array[i] = [];
  for (var j = 0; j < 100; j++) {
    k = k + 1;
    array[i].push(k);
  }
}
var needle = 130;
var result = getIndexOfK(array, needle);
console.log('The value #' + needle + ' is located at array[' + result[0] + '][' + result[1] + '].');


2
这个例子似乎也可以在不规则的多维数组中正常工作:
function findIndex(valueToSearch, theArray, currentIndex) {
    if (currentIndex == undefined) currentIndex = '';
        if(Array.isArray(theArray)) {
            for (var i = 0; i < theArray.length; i++) {
                if(Array.isArray(theArray[i])) {
                    newIndex = findIndex(valueToSearch, theArray[i], currentIndex + i + ',');
                    if (newIndex) return newIndex;
               } else if (theArray[i] == valueToSearch) {
                   return currentIndex + i;
               }
            }
    } else if (theArray == valueToSearch) {
        return currentIndex + i;
    }
    return false;
}

var a = new Array();
a[0] = new Array(1, 2, 3, 4, 5);
a[1] = 'ciao';
a[2] = new Array(new Array(6,7),new Array(8,9),10);

var specificIndex = findIndex('10', a);

我匆忙地写了这个函数,所以欢迎大家来改进它!
另外,该函数现在返回一个字符串值,其中所有索引都用逗号分隔。你可以简单地编辑它,使其返回一个对象。请注意保留HTML标签。

2
目前正在进行 Array.findIndex 的工作。 - adardesign

1

jsfiddle

function indexOf2d(arr, val) {
    var index = [-1, -1];

    if (!Array.isArray(arr)) {
        return index;
    }

    arr.some(function (sub, posX) {
        if (!Array.isArray(sub)) {
            return false;
        }

        var posY = sub.indexOf(val);

        if (posY !== -1) {
            index[0] = posX;
            index[1] = posY;
            return true;
        }

        return false;
    });

    return index;
}

console.log(indexOf2d(array, 50));

0

有一个非常简单的方法:

[1,2] === [1,2] // > false
JSON.stringify([1,2]) === JSON.stringify([1,2]) // > true

那么我们可以做这样的事情:

arrays.findIndex(array => JSON.stringify(array)  === JSON.stringify(arrayToCompare))

0

使用findIndex()和indexOf(),您可以用2行代码来完成:

const valueToSearch = "whatever";
let row = yourArray.findIndex((elem)=>elem.includes(valueToSearch));
let column = yourArray[row].indexOf(valueToSearch);

0

我的代码就像 MS Excel 中的 PROCV 函数... 只在第一列中进行索引搜索。也许能帮到你(或其他人)。

var convertToRoman = function (valueLimitTen) {   
  var convertTable = [  [1, "I"],
                        [2, "II"],
                        [3, "III"],
                        [4, "IV"],
                        [5, "V"],
                        [6, "VI"],
                        [7, "VII"],
                        [8, "VIII"],
                        [9, "IV"],
                        [10, "X"],
                      ];

  var myIndex;  
  for(var i in convertTable){
    if(convertTable[i][0] == valueLimitTen){
      myIndex = i;      
      return convertTable[i][1];      
    }  
  }  
}

console.log(convertToRoman(2)); //Result II
console.log(convertToRoman(10)); //Result X

0

ES6 已经使这变得更加容易。

function findIndexOfNestedArray(nestedArray, searchArray) {
  return searchArray.findIndex(item => {
    return item.length === nestedArray.length
    && item.every((a, i) => a === nestedArray[i])
  })
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接