¿Existe alguna manera más sencilla de reescribir la siguiente condición en JavaScript?Reduce varias OR en la instrucción IF en Javascript
if ((x == 1) || (x == 3) || (x == 4) || (x == 17) || (x == 80)) {...}
¿Existe alguna manera más sencilla de reescribir la siguiente condición en JavaScript?Reduce varias OR en la instrucción IF en Javascript
if ((x == 1) || (x == 3) || (x == 4) || (x == 17) || (x == 80)) {...}
Se podría utilizar un conjunto de valores válidos y probarlo con indexOf
:
if ([1, 3, 4, 17, 80].indexOf(x) != -1)
Editar Tenga en cuenta que indexOf
acaba de ser agregada en ECMAScript 5 y por lo tanto no es implementado en todos los navegadores. Sin embargo, se puede utilizar el following code añadir que si faltan:
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
O, si ya está utilizando un marco de JavaScript, también puede utilizar la aplicación de ese método.
switch (x) {
case 1:
case 3:
case 4:
case 17:
case 80:
//code
break;
default:
//code
}
exactamente simple, pero una buena alternativa, y el buen uso de no utilizar un descanso, que por cierto se le olvidó poner después del código en ' caso 80: ' – thecoshman
y necesita la ruptura en el caso predeterminado – BritishDeveloper
He hecho las ediciones que sugirió. ¡Gracias! – Yongho
muchas opciones
if ([0, 1, 3, 4, 17, 80].indexOf(x) > 0)
if(/^(1|3|4|17|80)$/.test(x))
if($.inArray(x, [1, 3, 4, 17, 80])
otro, basado en Ed's answer
function list() {
for (var i = 0, o = {}; i < arguments.length; i++)
o[arguments[i]] = '';
return o;
}
if(x in list(1, 3, 4, 17, 80))...
El índice de matriz de JavaScript comienza con 0. – Gumbo
@Gumbo: ¿en serio? ;/ – user187291
@stereofrog: Sí: '[0, 1, 3, 4, 17, 80] .indexOf (0) === 0'. – Gumbo
Usted puede optimizar su propio ejemplo y deshacerse de algunos caracteres, por lo que es más fácil en los ojos ..:
if (x == 1 || x == 3 || x == 4 || x == 17 || x == 80) { ... }
Esta es una pequeña función que encontré en algún lugar en la web:
function oc(a) {
var o = {};
for (var i = 0; i < a.length; i++) {
o[a[i]] = '';
}
return o;
}
usados como esto:
if (x in oc(1, 3, 4, 17, 80)) {...}
lo estoy usando para las cadenas de mí mismo; no he intentado con números, pero supongo que funcionaría.
Actualizado mi respuesta. – Edgar
una prueba de expresión regular utiliza el valor de cadena de x:
if(/^[134]|17|80$/.test(x)){/*...*/}
no
¡Genial, esto es lo que estaba buscando! Gracias ! –
+1 ... Este es el más adecuado. El operador 'in' no funciona correctamente para las matrices, como sugirió: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/in_Operator –
+1 ¡innovador! feo pero interesante – BritishDeveloper