En SQL, nous pouvons voir si une chaîne de caractères en une liste comme suit:
Column IN ('a', 'b', 'c')
Ce qui est une bonne façon de le faire en javascript? Il est tellement maladroit pour ce faire:
if (expression1 || expression2 || str === 'a' || str === 'b' || str === 'c') {
// do something
}
Et je ne suis pas sûr au sujet de la performance ou de la clarté de cette:
if (expression1 || expression2 || {a:1, b:1, c:1}[str]) {
// do something
}
Ou on pourrait utiliser la fonction de commutation:
var str = 'a',
flag = false;
switch (str) {
case 'a':
case 'b':
case 'c':
flag = true;
default:
}
if (expression1 || expression2 || flag) {
// do something
}
Mais c'est un horrible gâchis. Des idées?
Mise à JOUR
Je n'ai pas pensé à mentionner que, dans ce cas, je dois utiliser IE comme c'est pour un intranet d'entreprise de la page. Donc, ['a', 'b', 'c'].indexOf(str) !== -1
ne fonctionne pas nativement sans une certaine syntaxe de sucre.
Pour les navigateurs qui ne supportent pas l' indexOf
voici un pleinement conformes aux normes de la version de la fonction indexOf. Et voici ma version (car je ne fais pas de liste de la position ou de l'esprit de la traversée en sens inverse, ce devrait être plus rapide):
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(item) {
var i = this.length;
while (i--) {
if (this[i] === item) return i;
}
}
return -1;
}