在 JavaScript 数组中查找 NaN 的索引

发布于 2024-10-21 22:26:23 字数 123 浏览 5 评论 0原文

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

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

嘿咻 2024-10-28 22:26:23

您可以使用 Array.prototype.findIndex 查找数组中 NaN 索引的方法

let index = [1,3,4,'hello',NaN,3].findIndex(Number.isNaN)
console.log(index)

您可以使用 Array.prototype.includes 检查数组中是否存在 NaN。但它不会给你索引!它将返回一个布尔值。如果存在 NaN,则返回 true,否则返回 false

let isNaNPresent = [1,2,NaN,'ball'].includes(NaN)
console.log(isNaNPresent)

不要使用Array.prototype.indexOf

您不能使用Array.Prototype.indexOf 查找 NaN 位于数组内。因为 indexOf 使用 严格相等运算符 内部和 NaN === NaN 计算结果为 false。因此,indexOf 将无法检测数组内的 NaN

[1,NaN,2].indexOf(NaN) // -1

使用 Number.isNaN 而不是 isNaN

这里我选择数字。 isNaN 超过isNaN。因为 isNaNstring Literal 视为 NaN。另一方面,Number.isNaN 仅将 NaN< /code> 文字为 NaN

isNaN('hello world') // true
Number.isNaN('hello world') // false

或者,编写您自己的逻辑:

您可以编写自己的逻辑来查找 NaN。正如您所知, NaN 是 JavaScript 中唯一不等于自身的值。这就是我建议不要使用 Array.prototype.indexOf 的原因。

NaN === NaN // false

我们可以利用这个思想来编写我们自己的 isNaN 函数。

[1,2,'str',NaN,5].findIndex(e=>e!=e) // 3

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
千仐 2024-10-28 22:26:23

NaN 被定义为不等于任何东西(甚至不等于它本身)。请参阅此处:http://www.w3schools.com/jsref/jsref_isNaN.asp

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

一梦等七年七年为一梦 2024-10-28 22:26:23

您必须查看每个项目才能返回一个数组
为 NaN 值的索引 -

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])

// 或查找第一个 -

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

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文