我有多个输入,确切地说是16。我有一段冗长的代码,使用isNaN()来检查每个输入:
var Qs1 = 0;
var Qs2 = 0;
var Qs3 = 0;
var Qs4 = 0;
var Qs5 = 0;
var Qs6 = 0;
var Qs7 = 0;
var Qs8 = 0;
var Qs9 = 0;
var Qs10 = 0;
var Qs11 = 0;
var Qs12 = 0;
var Qs13 = 0;
var Qs14 = 0;
var Qs15 = 0;
var Qs16 = 0;
if(isNaN(Qs1)) {
Qs1 = 0;
}
if(isNaN(Qs2)) {
Qs2 = 0;
}
if(isNaN(Qs3)) {
Qs3 = 0;
}
if(isNaN(Qs4)) {
Qs4 = 0;
}
if(isNaN(Qs5)) {
Qs5 = 0;
}
等等。
事情是变量" Qs _"需要根据输入进行更改。例如:如果输入为1,则Qs_运行总和:Qs * 2 * 3; (不是实际的代码,只是一个例子)。
有没有办法可以压缩代码的isNaN()部分?
提前致谢。
答案 0 :(得分:1)
将变量存储在一个数组中并循环遍历它们:
let qs = []
qs.push(0, 0, 0, 'a')
qs.forEach(function(q, i){
if (isNaN(q)) qs[i] = 0
})
console.log(qs)

答案 1 :(得分:0)
@Bill是对的 - 使用数组会让这更容易!
因此,如果您的所有问题定义如下:
var qs = [0,0,'H',0,'E',0,'Y',0,0,0,0,0,0];
然后你可以这样做:
qs = qs.map(function(q){ return isNaN(q) ? 0 : q })
这将返回[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
这是JSBin上的一个实例:https://jsbin.com/kuvatiwafi/edit?js,console
答案 2 :(得分:0)
你可以使用一个隐含的转换来与一元+
进行数字并检查是否有任务。否则返回零。
我建议只使用以较低字符开头的变量。大写的起始位置通常用于函数,可以用作实例或类(大致相同)。
var qs1 = 0,
qs2 = -1,
qs3 = '',
qs4 = 'q',
array = [qs1, qs2, qs3, qs4].map(function (a) { return +a || 0; });
console.log(array);