92 votes

Vérifiez si le tableau contient tous les éléments d'un autre tableau

Je veux une fonction qui renvoie true si et seulement si un tableau donné comprend tous les éléments d'un tableau "cible" donné. Comme suit.

 const target = [ 1, 2, 3,    ];
const array1 = [ 1, 2, 3,    ]; // true
const array2 = [ 1, 2, 3, 4, ]; // true
const array3 = [ 1, 2,       ]; // false

Comment puis-je obtenir le résultat ci-dessus?

202voto

Mohammad Usman Points 17530

Vous pouvez utiliser les méthodes .every() et .includes() :

 let array1 = [1,2,3],
    array2 = [1,2,3,4],
    array3 = [1,2];

let checker = (arr, target) => target.every(v => arr.includes(v));

console.log(checker(array2, array1));
console.log(checker(array3, array1));

33voto

codemonkey Points 101

La every() teste si tous les éléments du tableau réussissent le test implémenté par la fonction fournie. Il renvoie une valeur booléenne. Cela signifie que si vous appelez every() sur le tableau d'origine et lui fournissez une fonction qui vérifie si chaque élément du tableau d'origine est contenu dans un autre tableau, vous obtiendrez votre réponse. En tant que tel:

 const ar1 = ['a', 'b'];
const ar2 = ['c', 'd', 'a', 'z', 'g', 'b'];

if(ar1.every(r => ar2.includes(r))){
  console.log('Found all of', ar1, 'in', ar2);
}else{
  console.log('Did not find all of', ar1, 'in', ar2);
}

3voto

Pankaj Revagade Points 41

J'ai utilisé purement Javascript.

 function checkElementsinArray(fixedArray,inputArray)
{
    var fixedArraylen = fixedArray.length;
    var inputArraylen = inputArray.length;
    if(fixedArraylen<=inputArraylen)
    {
        for(var i=0;i<fixedArraylen;i++)
        {
            if(!(inputArray.indexOf(fixedArray[i])>=0))
            {
                return false;
            }
        }
    }
    else
    {
        return false;
    }
    return true;
}

console.log(checkElementsinArray([1,2,3], [1,2,3]));
console.log(checkElementsinArray([1,2,3], [1,2,3,4]));
console.log(checkElementsinArray([1,2,3], [1,2]));

1voto

zetawars Points 557

Si vous utilisez ES5, vous pouvez simplement le faire.

 targetArray =[1,2,3]; 
array1 = [1,2,3]; //return true
array2 = [1,2,3,4]; //return true
array3 = [1,2] //return false

console.log(targetArray.every(function(val) { return array1.indexOf(val) >= 0; })); //true
 console.log(targetArray.every(function(val) { return array2.indexOf(val) >= 0; })); // true
 console.log(targetArray.every(function(val) { return array3.indexOf(val) >= 0; }));// false

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X