nesorethan
nesorethan

Reputation: 95

How do I check if a Javascript array contains all the other elements of another array

If I have one array:

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

And I have an array with several subarrays:

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

How can I check if array x contains all of the elements of any one subarray.

In other words, how can I check if array x has combinations of either the numbers 0,1,2 or 6,7,8...

Thanks in advance

Upvotes: 0

Views: 94

Answers (3)

Tianzhen Lin
Tianzhen Lin

Reputation: 2614

Array.includes is much slower than Set.has. A slightly more performant solution based on Ted Brownlow's solution would be:

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

Upvotes: 0

Ted Brownlow
Ted Brownlow

Reputation: 1117

"How can I check if array x contains all of the elements of any one subarray."

Here's the most straightforward functional interpretation.

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

Upvotes: 3

luscala
luscala

Reputation: 52

This could be an option. If you'd like to remove xIncludesItem key from result, just map it again.

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);

Upvotes: 0

Related Questions