Многомерные массивы — это мощная структура данных, используемая в различных языках программирования для хранения данных в нескольких измерениях. При работе с многомерными массивами часто возникает необходимость найти индекс того или иного элемента. В этой статье мы рассмотрим несколько методов выполнения этой задачи, а также примеры кода на JavaScript.
Метод 1: вложенные циклы
Один простой подход — использовать вложенные циклы для перебора каждого элемента многомерного массива и сравнения его с целевым значением. Вот пример:
function findIndexNested(arr, target) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr[i].length; j++) {
      if (arr[i][j] === target) {
        return [i, j];
      }
    }
  }
  return -1; // Element not found
}
const myArray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
const targetValue = 5;
const index = findIndexNested(myArray, targetValue);
console.log(index); // Output: [1, 1]
Метод 2: Array.prototype.findIndex()
JavaScript предоставляет метод findIndex(), который позволяет нам найти индекс первого элемента в массиве, который удовлетворяет заданному условию. Чтобы применить этот метод к многомерному массиву, мы можем использовать метод some()для внешнего массива и indexOf()для внутреннего массива. Вот пример:
function findIndexFind(arr, target) {
  let rowIndex = -1;
  let colIndex = -1;
  arr.some((row, i) => {
    const foundIndex = row.indexOf(target);
    if (foundIndex !== -1) {
      rowIndex = i;
      colIndex = foundIndex;
      return true;
    }
  });
  return (rowIndex !== -1 && colIndex !== -1) ? [rowIndex, colIndex] : -1;
}
const myArray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
const targetValue = 5;
const index = findIndexFind(myArray, targetValue);
console.log(index); // Output: [1, 1]
Метод 3: Array.prototype.flat() и Array.prototype.indexOf()
Другой подход предполагает преобразование многомерного массива в одномерный массив с помощью метода flat(), который объединяет все подмассивы в один. Затем мы можем использовать метод indexOf(), чтобы найти индекс целевого элемента. Вот пример:
function findIndexFlat(arr, target) {
  const flatArray = arr.flat();
  const index = flatArray.indexOf(target);
  if (index !== -1) {
    const rowIndex = Math.floor(index / arr[0].length);
    const colIndex = index % arr[0].length;
    return [rowIndex, colIndex];
  }
  return -1; // Element not found
}
const myArray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
const targetValue = 5;
const index = findIndexFlat(myArray, targetValue);
console.log(index); // Output: [1, 1]
В этой статье мы рассмотрели три метода поиска индекса элемента в многомерном массиве. Подход с вложенными циклами представляет собой простое и интуитивно понятное решение, а метод findIndex()и комбинация flat()и indexOf()предоставляют более лаконичные альтернативы. Выберите метод, который лучше всего соответствует вашим требованиям и стилю кодирования.