Как проверить наличие нескольких элементов одного массива в другом в js?
Вопрос заключается в следующем => Как можно реализовать проверку рождающегося массива на массивы, заключенные в объекте victory? Например родился массив ['a', 'c', 'f', 'i']. Нужно сделать так, чтобы этот массив сравнился с каждым из массивом объекта victory, и вывел в консоль, что он равен массиву victory.key6
let victory = {
key0 : ['a', 'b', 'c'],
key1 : ['d', 'e', 'f'],
key2 : ['g', 'h', 'i'],
key3 : ['a', 'd', 'g'],
key4 : ['a', 'b', 'c'],
key5 : ['b', 'e', 'h'],
key6: ['c', 'f', 'i'],
key7: ['a', 'e', 'i'],
key8: ['g', 'e', 'c'],
} //Здесь хранятся массивы, по которым проходится проверка.
-----------------------------------------------------------------
if (turn == 0) {
let type = field.getAttribute('data-type');
gamex.push(type);
gamex.sort();
console.log(gamex);
if (gamex == victory.key0) {
console.log('you win');
}
turn++;
// Здесь рождается массив, в который постепенно (по нажатию кнопки) добавляется один новый элемент, который является одной из букв [a-i].
// Массив может быть примерно таким ['a' ,'b' ,'c', 'f']
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
.every( fn ) — берет функцию, вызывает её для каждого элемента массива, и возвращает true только если вызываемая функция тоже на каждом круге возвращала true.
let victory = {
key0: ['a', 'b', 'c'],
key1: ['d', 'e', 'f'],
key2: ['g', 'h', 'i'],
key3: ['a', 'd', 'g'],
key4: ['a', 'b', 'c'],
key5: ['b', 'e', 'h'],
key6: ['c', 'f', 'i'],
key7: ['a', 'e', 'i'],
key8: ['g', 'e', 'c'],
};
console.log( test( ["f", "i", "c", "a"] ) );
console.log( test( ["c", "f", "a"] ) );
function test(arr) {
for( let key in victory ) {
if( victory[key].every(letter => arr.includes(letter)) ) {
return true;
}
}
return false;
}
Ну это можно сократить до одной строчки (но надо ли - вопрос):
let victory = {
key0: ['a', 'b', 'c'],
key1: ['d', 'e', 'f'],
key2: ['g', 'h', 'i'],
key3: ['a', 'd', 'g'],
key4: ['a', 'b', 'c'],
key5: ['b', 'e', 'h'],
key6: ['c', 'f', 'i'],
key7: ['a', 'e', 'i'],
key8: ['g', 'e', 'c'],
};
const test = (arr) => Object.values(victory).some(
victory_keys => victory_keys.every(letter => arr.includes(letter))
);
console.log( test( ["f", "i", "c", "a"] ) );
console.log( test( ["c", "f", "a"] ) );