我创建了一个脚本,它创建了3个数组元素,每个元素都相等:
Number(prompt())
然后我做了一个if语句说:
if (!arr[0] || !arr[1] || !arr[2]) {alert("invalid data")}
这对于几个元素是可以的,但是如果我想添加10个元素,那么添加一堆逻辑OR运算符就有点笨拙。
所以我想知道是否有办法告诉解释器“如果数组中的任何元素不是数字,那么警告错误,否则做警报(a)”。 (如果这有道理?)
我知道'in'运算符/关键字,但这似乎是针对数组名检查数组元素名称,以查看它是否存在于该数组中。然而,这并不是我所追求的。
我也看到有一个some()属性/函数但是我还没有学习JS。
完整的脚本小提琴:https://jsfiddle.net/hj56yhbm/
感谢。
答案 0 :(得分:8)
所以我想知道是否有办法告诉解释器“如果数组中的任何元素不是数字,那么警告错误,否则做警报(a)”
这是Array.prototype.some
或Array.prototype.every
的用例:
if (theArray.some(function(e) { return typeof e !== "number"; })) {
alert("Non-number found");
}
// Or
if (!theArray.every(function(e) { return typeof e === "number"; })) {
alert("Non-number found");
}
使用ES2015 +箭头功能阅读起来更容易一些:
if (theArray.some(e => typeof e !== "number")) {
alert("Non-number found");
}
// Or
if (!theArray.every(e => typeof e === "number")) {
alert("Non-number found");
}
谓词可以是你想要的任何东西。您的谓词!value
有两个问题:
0
是假的,因此!0
为true
!"hi"
是false
)这就是我在上面使用typeof
的原因。
另请注意,如果用户未输入任何数字,Number(prompt())
将返回0
(因为Number("")
为0
)。
答案 1 :(得分:2)
沿着这些方向的东西(ES6)
const ex1 = [1,2,3,"string"];
const ex2 = [1,2,3,4];
var areAllNumbersEx1 = ex1.every(e => typeof e === "number");
var areAllNumbersEx2 = ex2.every(e => typeof e === "number");
console.log(`Ex1 all numbers: ${areAllNumbersEx1}`); //outputs: Ex1 all numbers: false
console.log(`Exs all numbers: ${areAllNumbersEx2}`); //outputs: Ex2 all numbers: true