Как проверить, что массив содержит массив (из чисел)? - PullRequest
3 голосов
/ 08 ноября 2019

Я сохранил несколько пар координат в одном массиве. Например:

[[1,2],[4,5],[7,8]]

Я бы хотел найти полученную пару координат. Я получил координату:

[4,5]

Если массив содержит эти координаты, я получу true, иначе false. Это мой код:

function isContain(coords) {
   for (let i = 0; i < array.length; i++) {
       if (array[i].length !== coords.length) return false;

       for (let j = 0; j < array[i].length; j++) {
           if(array[i][j] === coords[j]) {
               return true
           }
       } 
  }
  return false
}

Ответы [ 4 ]

1 голос
/ 08 ноября 2019

Вы можете сделать что-то вроде этого

const foo = [[1, 2], [4, 5], [7, 8]];
const coords = [4, 5];

function isContain(coords) {
  for (const f of foo) {
    if (f[0] === coords[0] && f[1] === coords[1]) {
      return true;
    }
  }
  return false;
}

console.log(isContain(coords));
0 голосов
/ 08 ноября 2019

Попробуйте

arr.some(e=> e==''+[4,5])

let a=[[1,2],[4,5],[7,8]]

let isContain = (arr) => arr.some(e=> e==''+[4,5]);

console.log( isContain(a) );
0 голосов
/ 08 ноября 2019

Если вы просто сравниваете числа, вы можете преобразовать их в строки:

const isContain = coords =>
{
   for (let item of array)
   {
      if (item.split("") === coords.split(""))
         return true;
   }
   return false;
}
0 голосов
/ 08 ноября 2019

Поскольку координаты всегда содержат ровно два элемента, вам не нужен внутренний цикл, просто сравните X и Y напрямую. Также используйте for...of:

function isContain(coords){
  for(let item of array) {
    if(item[0] == coords[0] && item[1] == coords[1]) {
      return true;
    }
  }
  return false
}

Вы также можете использовать some вместо этого, например:

let exists = array.some(item => item[0] == coords[0] && item[1] == coords[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...