Find index of NaN in a javascript array

╄→гoц情女王★ 提交于 2020-11-27 05:01:32

问题


[1, 2, 3].indexOf(3) => 2

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

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

回答1:


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') // true
Number.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



回答2:


NaN is defined not to be equal to anything (not even itself). See here: http://www.w3schools.com/jsref/jsref_isNaN.asp




回答3:


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;
}


来源:https://stackoverflow.com/questions/5294413/find-index-of-nan-in-a-javascript-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!