2017-07-31 88 views
2

任何元件I由一个脚本,使得3的数组元素,其中的每一个等于:参考在阵列

Number(prompt())

然后我让一个if语句说:

if (!arr[0] || !arr[1] || !arr[2]) {alert("invalid data")}

这对于一些元素是可以的,但是如果我想添加10个元素,那么添加一堆逻辑OR运算符就有点笨拙。

所以我想知道是否有办法告诉解释器“如果数组中的任何元素不是一个数字,然后提醒一个错误,否则做警报(一)”。 )

我知道'in'运算符/关键字,但这似乎检查数组元素名称与数组名称,以查看它是否存在该数组中。然而,这并不完全是我所追求的。

我也看到有一些()属性/功能,但我还没有学到JS。

完整的脚本小提琴:https://jsfiddle.net/hj56yhbm/

感谢。

+0

什么值是有效的东西吗? –

+2

'if(arr.every(a => a))'? – Xufox

回答

8

所以我想知道如果有一种方法,只是告诉解释“如果阵列中的任何元素不是那么一些提醒的错误做别的警报(一)”

这是一个用例Array.prototype.someArray.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,有两个问题:

  1. 人数0是falsy,所以!0true
  2. 大量非数字值都truthy(例如,!"hi"false

这就是为什么我使用上面的typeof

而且提防Number(prompt())将返回0如果用户没有输入任何数字(因为Number("")0)。

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 
+0

'prompt'返回一个字符串。 –