Как мне проверить, содержит ли массив Javascript все другие элементы другого массива

#javascript

#javascript

Вопрос:

Если у меня есть один массив:

 let x=  [0,1,2,3,5]
 

И у меня есть массив с несколькими подмассивами:

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

Как я могу проверить, содержит ли массив x все элементы какого-либо одного подмассива.

Другими словами, как я могу проверить, содержит ли массив x комбинации чисел 0,1,2 или 6,7,8…

Заранее спасибо

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

1. Любой код для отображения в вашем текущем подходе?

2. Я вижу, вы убрали часть с крестиками-ноликами. Но я не вижу попытки кода решить эту проблему.

3. Это ваша структура данных, которая вызывает головную боль (для вас). Без контекста «крестики-нолики» вы вполне можете получить ответ, который логически работает, но не решает проблему. … Рассмотрите возможность использования 2-мерного массива для платы.

4. @GetSet Одномерный массив работал довольно хорошо, мне просто нужна была функция для сравнения массива. Спасибо за помощь

Ответ №1:

«Как я могу проверить, содержит ли массив x все элементы какого-либо одного подмассива».

Вот самая простая функциональная интерпретация.

 const won = winningIndices.some(indices=>
    indices.every(
        item=>x.includes(item)
    )
)
 

Ответ №2:

Это может быть вариантом. Если вы хотите удалить ключ xIncludesItem из результата, просто сопоставьте его снова.

 const winningIndices = [
  [0, 1, 2],
  [6, 7, 8],
  [0, 3, 6],
  [2, 5, 8],
  [0, 4, 8],
  [2, 4, 6]
];

const x = [0, 1, 2, 3, 5];

const result = winningIndices
  .map((item) => {
    const xIncludesItem = item
      .map((i) => x.includes(i))
      .every(includes => includes);
    return { item, xIncludesItem };
  })
  .filter(result => result.xIncludesItem);

console.log(result); 

Ответ №3:

Array.includes работает намного медленнее, чем Set.has. Немного более производительным решением, основанным на решении Теда Браунлоу, было бы:

 const setX = new Set(x);
const won = winningIndices.some(indices=>
    indices.every(
        item=>setX.has(item)
    )
)