Поиск индекса массива в массиве с использованием функций более высокого порядка?

#javascript #arrays #higher-order-functions

#javascript #массивы #функции более высокого порядка

Вопрос:

Я могу найти, существует ли массив в другом массиве:

 const arr1 = [[1,2,3],[2,2,2],[3,2,1]];

const match = [2,2,2];

// Does match exist
const exists = arr1.some(item => {
  return item.every((num, index) => {
    return match[index] === num;
  });
});
 

И я могу найти индекс этого массива:

 let index;
// Index of match
for(let x = 0; x < arr1.length; x  ) {
  let resu<
  for(let y = 0; y < arr1[x].length; y  ) {
    if(arr1[x][y] === match[y]) { 
      result = true; 
    } else { 
      result = false; 
      break; 
    }
  }
  
  if(result === true) { 
    index = x; 
    break;
  }
}
 

Но возможно ли найти индекс, используя функции более высокого порядка JS? Я не мог видеть подобный вопрос / ответ, и это просто немного более чистый синтаксис

Спасибо

Ответ №1:

Вы могли бы взять Array#findIndex .

 const
    array = [[1, 2, 3], [2, 2, 2], [3, 2, 1]],
    match = [2, 2, 2],
    index = array.findIndex(inner => inner.every((v, i) => match[i] === v));

console.log(index); 

Комментарии:

1. Ах, отлично, это та комбинация, которую я ищу. Спасибо!

Ответ №2:

Другой подход преобразует inner-arrays массив of в строки, подобные ['1,2,3', '2,2,2', '3,2,1'] , а также преобразует соответствующий массив в строку 2,2,2 . затем используйте встроенную функцию indexOf для поиска этого индекса в массиве.

 const arr1 = [[1,2,3],[2,2,2],[3,2,1]];
const match = [2,2,2];

const arr1Str = arr1.map(innerArr=>innerArr.toString());
const index = arr1Str.indexOf(match.toString())
console.log(index);