¿Puede decirme cómo reemplazar NaN con otro personaje? Hay variables a las que se les asigna algún valor numérico. Más adelante en la función, estas variables obtienen sus valores, que luego muestro en la tabl html e. Pero a veces alguna variable devuelve NaN .
Para solucionar esto, creé por separado una matriz con variables que ya tienen algunos valores. A continuación, comencé el ciclo. Si la condición devuelve NaN , entonces debe reemplazarse con "-" . Pero no funciona.
var a, b, c, d, x1, x2, x3, x4; var elem = document.getElementById.bind(document); function iFunc() { a = 1; b = 3; c = 2; d = NaN; x1 = elem('a1').innerHTML = a; x2 = elem('b1').innerHTML = b; x3 = elem('c1').innerHTML = c; x4 = elem('d1').innerHTML = d; var arrX = [x1, x2, x3, x4]; for (var x of arrX) { if (x !== x) { x = "-"; // the character that was supposed to replace NaN console.log(x); } } } iFunc(); <table> <tr> <td><span id="a1"></span></td> <td><span id="b1"></span></td> <td><span id="c1"></span></td> <td><span id="d1"></span></td> </tr> </table>UPD: con .mapa()
var a, b, c, d, x1, x2, x3, x4; var elem = document.getElementById.bind(document); function iFunc() { a = 1; b = 3; c = 2; d = NaN; x1 = elem('a1').innerHTML = a; x2 = elem('b1').innerHTML = b; x3 = elem('c1').innerHTML = c; x4 = elem('d1').innerHTML = d; var arrX = [x1, x2, x3, x4].map(n => n != n ? "-" : n); console.log(arrX); } iFunc(); <table> <tr> <td><span id="a1"></span></td> <td><span id="b1"></span></td> <td><span id="c1"></span></td> <td><span id="d1"></span></td> </tr> </table>Está cambiando el valor devuelto por elem('d1').innerHTML que no afectará lo que hay en el DOM. Lo que está tratando de hacer de una manera simplificada:
var a, b, c, d, x1, x2, x3, x4; var elem = document.getElementById.bind(document); function iFunc() { a = 1; b = 3; c = 2; d = NaN; elem("a1").innerHTML = a!=a ? "-" : a; elem("b1").innerHTML = b!=b ? "-" : b; elem("c1").innerHTML = c!=c ? "-" : c; elem("d1").innerHTML = d!=d ? "-" : d; } iFunc(); <table> <tr> <td><span id="a1"></span></td> <td><span id="b1"></span></td> <td><span id="c1"></span></td> <td><span id="d1"></span></td> </tr> </table> Para quienes sugieren usar isNaN , no es la mejor manera para todos los casos de uso, según MDN :
Alternativamente, en ausencia de
Number.isNaN, la expresión (x != x) es una forma más confiable de probar si la variablexesNaNo no, ya que el resultado no está sujeto a los falsos positivos que hacen queisNaNno sea confiable.
Debe reemplazar el valor en la matriz. Actualmente solo está reemplazando el valor en la variable X.
Aquí hay una solución con un bucle for corregido:
var a, b, c, d, x1, x2, x3, x4; var elem = document.getElementById.bind(document); function iFunc () { a = 1; b = 3; c = 2; d = NaN; var arrX = [x1, x2, x3, x4]; for (var index = 0; index < arrX.length; index++) { var x = arrX[index]; // first we extract the value from the array arrX[index] = isNaN( x ) ? "-" : x;//then we replace the value in the array console.log(arrX[index]) } x1 = elem('a1').innerHTML = a; x2 = elem('b1').innerHTML = b; x3 = elem('c1').innerHTML = c; x4 = elem('d1').innerHTML = d; } iFunc (); <table> <tr> <td><span id="a1"></span></td> <td><span id="b1"></span></td> <td><span id="c1"></span></td> <td><span id="d1"></span></td> </tr> </table>un buen enfoque sería tener todos los valores en una matriz. entonces puede usar un bucle para reemplazar los valores de NaN. Luego, puede manejar la nueva matriz asignada como desee.
const arr = [1, 3, 2, NaN].map(n => n != n ? "-" : n) console.log(arr) respuesta anterior Puede verificar con la función isNaN() o n != n y, si es cierto, puede imprimir "-" . En su caso, envolvería este cheque en una función. Como esto:
function checkNumber(n) { return n != n ? "-" : n; } var a, b, c, d, x1, x2, x3, x4; var elem = document.getElementById.bind(document); function iFunc () { a = 1; b = 3; c = 2; d = NaN; x1 = elem('a1').innerHTML = checkNumber(a); x2 = elem('b1').innerHTML = checkNumber(b); x3 = elem('c1').innerHTML = checkNumber(c); x4 = elem('d1').innerHTML = checkNumber(d); var arrX = [x1, x2, x3, x4]; for (var x of arrX) { x = checkNumber(x); console.log(x); } } iFunc (); function checkNumber(n) { return n != n ? "-" : n; } <table> <tr> <td><span id="a1"></span></td> <td><span id="b1"></span></td> <td><span id="c1"></span></td> <td><span id="d1"></span></td> </tr> </table>