Tengo múltiples entradas, 16 para ser exactos. Tengo un extenso código que usa isNaN () para verificar cada entrada:

var Qs1 = 0;
var Qs2 = 0;
var Qs3 = 0;
var Qs4 = 0;
var Qs5 = 0;
var Qs6 = 0;
var Qs7 = 0;
var Qs8 = 0;
var Qs9 = 0;
var Qs10 = 0;
var Qs11 = 0;
var Qs12 = 0;
var Qs13 = 0;
var Qs14 = 0;
var Qs15 = 0;
var Qs16 = 0;

if(isNaN(Qs1)) {
      Qs1 = 0;
    }

    if(isNaN(Qs2)) {
      Qs2 = 0;
    }

    if(isNaN(Qs3)) {
      Qs3 = 0;
    }

    if(isNaN(Qs4)) {
      Qs4 = 0;
    }

    if(isNaN(Qs5)) {
      Qs5 = 0;
    }

Etcétera etcétera.

La cuestión es que las variables "Qs_" deben cambiar según la entrada. Por ejemplo: si la entrada es 1, Qs_ ejecuta la suma: Qs * 2 * 3; (No es el código real, solo un ejemplo).

¿Hay alguna manera de condensar la parte isNaN () de mi código?

Gracias de antemano.

1
Coder 16 feb. 2017 a las 13:57

3 respuestas

La mejor respuesta

Almacene sus variables en una matriz y repítalas:

let qs = []
qs.push(0, 0, 0, 'a')

qs.forEach(function(q, i){
  if (isNaN(q)) qs[i] = 0
})

console.log(qs)
1
Bill 16 feb. 2017 a las 11:26

Puede usar una conversión implícita para numerar con un + unario y verificar la veracidad. De lo contrario, devuelve cero.

Sugiero usar solo variables que comiencen con caracteres más bajos. El inicio en mayúsculas generalmente se deja para la función que se puede usar como instancia o clases (que es casi lo mismo).

var qs1 = 0,
    qs2 = -1,
    qs3 = '',
    qs4 = 'q',
    array = [qs1, qs2, qs3, qs4].map(function (a) { return +a || 0; });

console.log(array);
0
Nina Scholz 16 feb. 2017 a las 11:53

@Bill tiene razón: ¡usar una matriz lo haría mucho más fácil!

Entonces, si tuviera todas sus Q definidas como:

var qs = [0,0,'H',0,'E',0,'Y',0,0,0,0,0,0];

Entonces podrías simplemente hacer:

qs = qs.map(function(q){ return isNaN(q) ? 0 : q })

Esto devolverá [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Aquí hay un ejemplo en vivo en JSBin: https://jsbin.com/kuvatiwafi/edit?js,console

0
Alicia 16 feb. 2017 a las 11:51