Jquery check if array 2 use all values array 1

285 views Asked by At

i'm trying to check if the array1 use all values of my array2, if false return error message, but my array1.length is not equal to array2.length , i'm searching for hours to know why. Can someone help me? and if the problem does not come from there, anyone can tell me my mistake ?

function controlUserInput(inputText, appLang) {
 const regex = /\$[^$]*\$/gm;
const str = $('#formulaire-preview-textarea').val();
let m;
 var array =  populateVariable(appLang);
 
while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
  var isEqual = match.length==array.length;
  // for (i=0; i<=array.length-1;i++){
   if(displayCpt == 4 && isEqual && Array.from(match).every(function(paramInMatch){
    return $.inArray(paramInMatch, array) != -1; 
   })){
    osapi.jive.core.container.sendNotification({
    "message": "Toutes les valeurs rentrées sont correctes",
    "severity": "success"
    });
   }else{
    osapi.jive.core.container.sendNotification({
    "message": "Vous n'avez pas utilisé toutes les valeurs",
    "severity": "error"
    });
   } 
  // }
 })
    };
}

1

There are 1 answers

0
Rodrigo Ferreira On

Edit:

When you are trying to iterate over all the elements of m, a single String is stored in match so when you are trying to compare with array it fails.

Instead of iterating over all the elements of m, the solution would be:

if (
  m.length === array.length &&
  m.every(el => array.includes(el))
) {
  osapi.jive.core.container.sendNotification({
    message: 'Toutes les valeurs rentrées sont correctes',
    severity: 'success'
  });
} else {
  osapi.jive.core.container.sendNotification({
    message: "Vous n'avez pas utilisé toutes les valeurs",
    severity: 'error'
  });
}

Hope it helps!

Original Answer

If you want to check if every element of an array is used in another array you may have two approaches:

Arr2 is a SubSet of Arr1

const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = [1, 2, 5, 6];

function isSubSet(subSet, wholeSet) {
  return subSet.every(el => wholeSet.includes(el));
}

console.log(isSubSet(arr2, arr1)); // returns true

Arr2 contains all elements of Arr1

const arr1 = [1, 2, 3, 4, 5, 6];
const arr2 = [1, 2, 5, 6];
const arr3 = [1, 2, 5, 6, 3, 4];

function isWholeSet(subSet, wholeSet) {
  return (
    subSet.length === wholeSet.length &&
    subSet.every(el => wholeSet.includes(el))
  );
}

console.log(isWholeSet(arr2, arr1)); // returns false
console.log(isWholeSet(arr3, arr1)); // returns true