Find index of NaN in a javascript array
You can use Array.prototype.findIndex method to find out the index of NaN in an array
let index = [1,3,4,'hello',NaN,3].findIndex(Number.isNaN)console.log(index)
You can use Array.prototype.includes to check if NaN is present in an array or not. It won't give you the index though !! It will return a boolean value. If NaN is present true will be returned, otherwise false will be returned
let isNaNPresent = [1,2,NaN,'ball'].includes(NaN)console.log(isNaNPresent)
Don't use Array.prototype.indexOf
You can not use Array.Prototype.indexOf to find index of NaN inside an array.Because indexOf uses strict-equality-operator internally and NaN === NaN
evaluates to false
.So indexOf won't be able to detect NaN inside an array
[1,NaN,2].indexOf(NaN) // -1
Use Number.isNaN
instead of isNaN
:
Here i choose Number.isNaN over isNaN. Because isNaN
treats string literal
as NaN
.On the other hand Number.isNaN
treats only NaN
literal as NaN
isNaN('hello world') // trueNumber.isNaN('hello world') // false
Or, Write your own logic :
You can write your own logic to find NaN.As you already know that, NaN is the only value in javascript which is not equal to itself
. That's the reason i suggested not to use Array.prototype.indexOf
.
NaN === NaN // false
We can use this idea to write our own isNaN function.
[1,2,'str',NaN,5].findIndex(e=>e!=e) // 3
NaN is defined not to be equal to anything (not even itself). See here: http://www.w3schools.com/jsref/jsref_isNaN.asp
You have to look at each item to return an array of the indexes that are NaN values-
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, 'cat'/3])
//or to find the first one-
function firstNaN(arr){ var i= 0, L= arr.length; while(i<L){ if(isNaN(arr[i])) return i; ++i; } return -1;}