Vaibhav Shah
Vaibhav Shah

Reputation: 1

Comparing an array to an array set in JavaScript

I want to compare an array with an array set. For example,

array 1 = [[1,2,3],[1,4,5]];
array 2 = [1,3,6,5,4];

Since the elements 1,4,5 in array 2 match with a set in array 1 it should return true.

Upvotes: 0

Views: 134

Answers (5)

vol7ron
vol7ron

Reputation: 42109

Iterate over your array and check if the value exists in the other array.

var sets = [
    [1, 2, 3],
    [1, 4, 5]
  ],
  valid = [1, 3, 6, 5, 4];

var processed = sets.map(set => set.every(val => valid.includes(val)));

console.log( processed);

There are ways to make this more efficient, but try this for starters.


Here's an example how you can check if any are true:

// Check if any are true
var any = processed.some(v=>v);
console.log( any );

Upvotes: 1

Gal Ratzkin
Gal Ratzkin

Reputation: 161

You can iterate over array1 and use every() on each number group and as a condition for it use includes() with the second array for a relatively short syntax:

var array1 = [
  [1, 2, 3],
  [1, 4, 5]
];
var array2 = [1, 3, 6, 5, 4];
var results = [];

array1.forEach(function(item, index, array) {
  if (item.every(x => array2.includes(x))) {
    results.push(item)
  }
});

console.log(results)

Edited : I'm pushing the results that return true to an empty array ...

Upvotes: 0

Zhijing Xue
Zhijing Xue

Reputation: 26

use loop and loop. get all child array in array1, and check each child array include in array2.

function check(){
  var array1 = [[1,2,3],[1,4,5]];
  var array2 = [1,3,6,5,4];
  for(let arr of array1){
    let flag=true;
    for(let child of arr){
      if(array2.indexOf(child) < 0){
        flag = false;
        break;  // if one element not in array2, enter next loop.
      }
    }
    if(flag) return flag; // if got one child array elements all in array2, stop loop.
  }
}

Upvotes: 1

Cavan Page
Cavan Page

Reputation: 535

var array1 = [
  [1, 2, 3],
  [1, 4, 5]
];


var array2 = [1, 3, 6, 5, 4];

var isMatch = doesNestedArrayMatchArray(array1, array2);

function doesNestedArrayMatchArray(nestedArray, bigArray) {
  var atLeastOneMatch = false;

  for (var i = 0; i < nestedArray.length; i++) {
    var innerMatch = true;

    //go through each array of array1
    for (var j = 0; j < nestedArray[i].length; j++) {
      if (bigArray.indexOf(nestedArray[i][j]) == -1){
      	  innerMatch = false;
          break;
        }
    }

    if (innerMatch) atLeastOneMatch = true;
  }

  return atLeastOneMatch;
}

console.log(isMatch)

Upvotes: 0

Joseph
Joseph

Reputation: 119847

Flatten the first array (unpack the nested arrays). Then do an intersection of the flattened array and the second array. Map through the first array, and for each each array do an intersection against the second array. Then filter out all arrays that are empty. If the resulting array contains something, then something matched.

const hasMatch = Boolean(array1.map(a => intersect(a, array2)).filter(i => i.length).length)

Upvotes: 0

Related Questions