Javascript 检查对象数组中计算的所有值是否为NaN的逻辑
我对对象内部的逻辑函数有问题 我从html页面获取信息,通常需要检查大约50个对象: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
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”的。