Javascript 检查对象数组中计算的所有值是否为NaN的逻辑

Javascript 检查对象数组中计算的所有值是否为NaN的逻辑,javascript,arrays,Javascript,Arrays,我对对象内部的逻辑函数有问题 我从html页面获取信息,通常需要检查大约50个对象: for (var numbers in table) { let alfa = table[numbers].nl + table[numbers].n2; if (alfa < 201) { console.log(`found it in: ${numbers}`); } } for(表中的变量编号){ 设alfa=表[numbers].nl+表[numbe

我对对象内部的逻辑函数有问题

我从html页面获取信息,通常需要检查大约50个对象:

for (var numbers in table) {
    let alfa = table[numbers].nl + table[numbers].n2;

    if (alfa < 201) {
        console.log(`found it in: ${numbers}`);
    }
}
for(表中的变量编号){
设alfa=表[numbers].nl+表[numbers].n2;
如果(阿尔法<201){
log(`find in:${numbers}`);
}
}
有时变量'alfa'是NaN(这不是问题),但当循环中的每个项(变量:alfa)都是NaN时,我如何检查大小写

只有当循环中的每个项都是NaN时,我才需要handle函数,如果有几个项是NaN,其余的是数字,我不想对代码做任何事情


感谢大家提供的解决方案

为什么不能检查以下条件:

for (var numbers in table) {
    let alfa = table[numbers].nl + table[numbers].n2;

    if (Number.isNaN(alfa) && alfa < 201) {
        console.log(`found it in: ${numbers}`);
    }
}
for(表中的变量编号){
设alfa=表[numbers].nl+表[numbers].n2;
if(编号isNaN(阿尔法)和阿尔法<201){
log(`find in:${numbers}`);
}
}

如果通过添加得到
NaN
,则
表[numbers].nl
表[numbers].n2
必须是
NaN

您可以使用和检查所有这些值是否都是
NaN
。isNaN:

if (Object.values(table).every(v => Number.isNaN(v.nl) || Number.isNaN(v.n2))) {
    console.log("All are NaN")
} else {
    // do the normal thing
}
当然,您也可以进行加法并检查结果:

if (Object.values(table).every(v => Number.isNaN(v.nl + v.n2))) {
    console.log("All are NaN")
}

可以使用JS函数includes()检查数组是否包含要查找的项。返回true或false

if (arr.includes(!NaN)){
    console.log("Doesnt includes Nan");
}else{
    console.log("includes Nan")
}
应用于您的代码,它将是:

if(table.includes(!NaN){ 
// Handle this case
}else{
for (var numbers in table) {
        let alfa = table[numbers].nl + table[numbers].n2;

        if (alfa < 201) {
            console.log(`found it in: ${numbers}`);
        }
    }
}
if(table.includes(!NaN){
//办案
}否则{
对于(表中的var编号){
设alfa=表[numbers].nl+表[numbers].n2;
如果(阿尔法<201){
log(`find in:${numbers}`);
}
}
}
首先简单地计算所有值,然后使用检查其中是否有一个值不是
NaN
,并立即返回

const alfaValues = table.map(t => t.n1 + t.n2);
const foundNotNaN = alfaValues.find(o => !isNaN(o));

//if there is a value in foundNotNaN then all values are not NaN
if(foundNotNaN){

}else{
    //all values are NaN
}
示例: 当循环中的每个项(变量:alfa)都为NaN时,如何检查大小写

案例1:其中每个alfa(obj.n1+obj.n2)不是NaN

const x = [{n1: NaN, n2: 3}, {n1: 5, n2: 7}];
const alfaValuesX = x.map(t => t.n1 + t.n2);
//results in [NaN, 12]
const foundNotNaNX = alfaValuesX.find(o => !isNaN(o));
//results in 12
//conclusion: every calculation of alfa (obj.n1 + obj.n2) is not NaN atleast one is found
案例2:其中每个alfa(obj.n1+obj.n2)都会导致NaN

const y = [{n1: NaN, n2: 3}, {n1: 5, n2: NaN}, {n1:NaN, n2:NaN}];
const alfaValuesY = y.map(t => t.n1 + t.n2);
//results in [NaN, NaN, NaN]
const foundNotNaNY = alfaValuesY.find(o => !isNaN(o));
//results in undefined
//conclusion: every calculation of alfa (obj.n1 + obj.n2) is NaN

alfa!==NaN
将始终为真。您必须使用
Number.isNaN
好的,当每个名为'alfa'的变量都是NaN时,我需要重新记录帐户,但如果有几个项目是NaN,则它完全是NaNfine@FelixKling谢谢你的更正我将编辑我的答案
all
我想是打字错误,你的意思是
每一个
对吗?哇,是的!D不同的语言对它们的调用不同:-/I在nodejs脚本中将.all改为.each,它工作得很好,谢谢!“如果foundNotNaN中有值,那么所有值都不是NaN”OP说情况并非如此。有些可能是NaN,有些可能不是。我遗漏了什么。在
.map
之后,如果找到的任何值不是
NaN
,这意味着每个计算的总和(
alfa
示例)不是
NaN
,反之亦然。这是OP想要的..检查所有值何时会
NaN
不是吗?是的,这是OP想要的,但我的意思是一个值不是NaN并不意味着所有值都是。从帖子:“只有当循环中的每个项都是NaN时,我才需要handle函数,如果有几个项是NaN,其余的是数字,我不想对代码做任何事情”@FelixKling不确定我是否不能理解一些愚蠢的事情。请容忍我..但是使用这个
alfaValues.find(o=>!isNaN(o))
将返回
未定义的
,直到结束,并且没有一个是isNaN()作为falsy。如果其中任何一个不是,它将返回一个值,表示其中至少有一个不是
NaN
rest可以是/不可能是,这确认了所有值都不是
NaN
。好的,让我们举个例子:
[{n1:NaN,n2:3},{n1:5,n2:7}]
。其中一个的总和不是
NaN
,但不是所有的都是
NaN
。这就是我要指出的。我不明白你是如何从“rest可能是/不可能是”到“这是确认所有值都不是NaN”的。