2011-03-14 21 views
8
[1, 2, 3].indexOf(3) => 2 

[1, 2, NaN].indexOf(NaN) => -1 

[1, NaN, 3].indexOf(NaN) => -1 
+0

Puede usar ['Array.prototype.includes'] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) si solo quieres saber ** si una matriz incluye un 'NaN' **:' [NaN] .includes (NaN)/* true */'. –

Respuesta

1

puede utilizar Array.prototype.findIndex método para averiguar el índice de NaN en una matriz

let arr = [1,3,4,NaN,3] 
 

 
let index = arr.findIndex(elem=>isNaN(elem)) 
 
console.log(index)

No se puede utilizar para encontrar Array.Prototype.indexOf índice de NaN dentro de un array.Because indexOf utiliza strict-equality-operator interna y NaN === NaN evalúa a false .So indexOf no será capaz de detectar NaN dentro de una matriz

10

NaN se define como no igual a nada (ni siquiera a sí mismo). Ver aquí: http://www.w3schools.com/jsref/jsref_isNaN.asp

+0

Rechazará y aceptará cuando se acabe el tiempo. Eso es solo retardado. – mcandre

+0

Explique eso al IEEE; es su estándar de coma flotante que define 'NaN' para que no sea igual a nada. (Dicho esto, piénselo como 'NULL' en RDBMSes). – geekosaur

+0

-1 también se usa como un valor de error. ¿Tendría algún sentido para -1! = -1? – mcandre

1

Tienes que mirar a cada elemento para devolver una matriz de los índices que son NaN valores-

function findNaNs(arr){ 
    return arr.map(function(itm, i){ 
     if(isNaN(itm)) return i; 
     return false; 
    }).filter(function(itm){ 
     return itm; 
    }); 
} 

findNaNs ([1, NaN, 3, 4, 'gato'/3])

// o para encontrar la primera uno

function firstNaN(arr){ 
    var i= 0, L= arr.length; 
    while(i<L){ 
     if(isNaN(arr[i])) return i; 
     ++i; 
    } 
    return -1; 
} 
+0

Gracias, Kennebec. No es difícil codificar este problema, solo inconveniente. – mcandre

+0

Nunca use 'isNaN', está roto. Implica coactivamente el tipo de valor. Obtienes 'true' para' isNaN (undefined) ',' isNaN ({}) '(pero no' isNaN ([]) '), etc. Usa la comparación consigo misma en su lugar:' x! == x' ('NaN 'es el único valor que no es igual a uno mismo). –

+0

La primera rutina no puede encontrar NaN si es el primer elemento. – ziyuang

Cuestiones relacionadas