Как найти искомый массив в многомерном массиве?

294
09 июля 2018, 11:10

Есть многомерный массив в javascript:

let win_tbl = [
  [0,1,2],
  [3,4,5],
  [6,7,8],
  [0,3,6],
  [1,4,7],
  [2,5,8],
  [0,4,8],
  [2,4,6]
];

Как проверить содержит ли этот массив внутри себя массив:

let myhodarr = [1,4,7];

Проверка:

if(win_tbl.indexOf(myhodarr) !== -1)

не срабатывает.

Answer 1

let win_tbl = [ 
  [0,1,2], 
  [3,4,5], 
  [6,7,8], 
  [0,3,6], 
  [1,4,7], 
  [2,5,8], 
  [0,4,8], 
  [2,4,6] 
]; 
let myhodarr = [1,4,7]; 
 
console.log(JSON.stringify(win_tbl).indexOf(JSON.stringify(myhodarr)) != -1);

Answer 2

let win_tbl = [ 
  [0,1,2], 
  [3,4,5], 
  [6,7,8], 
  [0,3,6], 
  [1,4,7], 
  [2,5,8], 
  [0,4,8], 
  [2,4,6] 
]; 
 
let myhodarr = [1,4,7]; 
 
var found = win_tbl.filter(function (e) {  
 return e.length === myhodarr.length && e.every(function (v, i) {  
   return v === myhodarr[i]; 
 }); 
}) 
 
console.log(found);

Answer 3

Объяснение смотрите ниже:

var win_tbl = 
[ 
    [0,1,2], 
    [3,4,5], 
    [6,7,8], 
    [0,3,6], 
    [1,4,7], 
    [2,5,8], 
    [0,4,8], 
    [2,4,6] 
], 
myhodarr = [1,4,7]; 
 
console.log(win_tbl.join('_').indexOf(myhodarr.join()) > -1); 
console.log(win_tbl.join('_').indexOf('' + myhodarr) > -1); 
console.log(win_tbl.join('_').indexOf([6,1,4].join()) > -1); 
console.log(win_tbl.join('_').indexOf('' + [6,1,4]) > -1);

Как это работает:

Вызов win_tbl.join('_') нам даёт такую строку:

0,1,2_3,4,5_6,7,8_0,3,6_1,4,7_2,5,8_0,4,8_2,4,6

Вызов myhodarr.join() нам даёт такую строку:

1,4,7

Далее с помощью строчной функции indexOf() мы ищем 2-ую строку в 1-ой. Если она там есть, то значит массив в массиве тоже есть.

Совет: выражение myhodarr.join() можно заменить на '' + myhodarr и получим тоже самое, но короче.

Справка: Array.join()

READ ALSO
Проблема с <select> option

Проблема с <select> option

Стилизировал <select> в cssВозникла проблема, которая состоит в том, что по умолчанию стоит первый option (там написано "Выберите необходимый...

228
Как сделать добавление товара в корзине?

Как сделать добавление товара в корзине?

Как сделать так, чтобы при каждом клике на кнопку, число в другом блоке изменялось на единицу(+1)?

206
Ошибка в выводе данных в шаблон ejs

Ошибка в выводе данных в шаблон ejs

Есть коллекция sights, в нее вложена коллекция sight, которое имеет поле titleSightПроблема с выводом значения titleSight в шаблон

217
Как отправить ajax запрос по клику на кнопку?

Как отправить ajax запрос по клику на кнопку?

Мне нужно что бы при клике на кнопку One\two\three\etc

333