J'ai un tableau que je boucle pour tester si une chaîne fournie par l'utilisateur existe dans la boucle. Lorsque j'exécute la boucle et que je vérifie, elle renvoie true sur les éléments du tableau auxquels elle correspond et false sur ceux qu'elle ne contient pas. Je sais que c'est parce que je vérifie chaque élément du tableau individuel. Ma question est, comment puis-je obtenir vrai uniquement si la chaîne correspond à l'élément de tableau?

var string = "a";
var array = ["a", "b", "c"];
for(var i = 0; i < array.length; i++){
    if(string == array[i]){
        console.log("Exists");
    }
    else{
        console.log("Doesn't exist");
    }
}

En ce moment, si je devais exécuter cela, je verrais:

"Exists" "Doesn't exist" "Doesn't exist"

0
user4720622 9 août 2016 à 19:35

5 réponses

Meilleure réponse

Vous pouvez le faire en utilisant includes(),

var str = "a";
var arr = ["a", "b", "c"];
var res = arr.includes(str);
if(res) console.log("exists");

Et si vous êtes préoccupé par la prise en charge du navigateur, utilisez simplement {{ X0}},

var str = "a";
var arr = ["a", "b", "c"];
var res = (arr.indexOf(str) > -1);
if(res) console.log("exists");
4
Rajaprabhu Aravindasamy 9 août 2016 à 16:38

Vous pouvez utiliser Array.filter pour obtenir uniquement les éléments correspondants:

var string = "a";
var array = ["a", "b", "c"];

var matches = array.filter(function(item) {
   return item === string;
});

Ou ES6

var matches = array.filter(item => item === string);

Vous pouvez également utiliser Array.some si vous voulez simplement true / false:

array.some(item => item === string); // true
array.some(item => item === 'foo'); // false
0
Rob M. 9 août 2016 à 16:39

Utilisez la méthode .some ().

Il est important de noter que .some() arrêtera l'exécution une fois qu'il retournera la première vraie valeur, tandis que .forEach() et .filter() parcourront le tableau entier à chaque fois. Cela peut avoir de graves conséquences sur les performances en fonction de la taille de votre baie.

var string = "a";
var array = ["a", "b", "c"];
var exists = array.some(function (elem, index) {
  return string == elem;
});
if (exists) {
  console.log("Exists");
}
else {
  console.log("Doesn't Exist");
}
1
mhodges 9 août 2016 à 16:39

Vous pouvez utiliser la boucle for..of, break

var string = "a";
var array = ["a", "b", "c"];
for (let prop of array) {if (prop === string) {console.log("Exists"); break;}};
0
guest271314 9 août 2016 à 16:51

Essayez:

var string = "a";
var array = ["a", "b", "c"];
var found = false;
for(var i = 0; i < array.length; i++){
    if(string == array[i]){
        found = true;
        break;
    }
}
if (found === true){
    console.log("Exists");
}
else{
    console.log("Doesn't exist");
}
0
Rich Linnell 9 août 2016 à 16:56