Есть многомерный массив в 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)
не срабатывает.
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);
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);
Объяснение смотрите ниже:
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()
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости