引用数组中的任何元素

时间:2017-07-31 12:21:28

标签: javascript arrays if-statement

我创建了一个脚本,它创建了3个数组元素,每个元素都相等:

Number(prompt())

然后我做了一个if语句说:

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

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

所以我想知道是否有办法告诉解释器“如果数组中的任何元素不是数字,那么警告错误,否则做警报(a)”。 (如果这有道理?)

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

我也看到有一个some()属性/函数但是我还没有学习JS。

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

感谢。

2 个答案:

答案 0 :(得分:8)

  

所以我想知道是否有办法告诉解释器“如果数组中的任何元素不是数字,那么警告错误,否则做警报(a)”

这是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是假的,因此!0true
  2. 许多非数字值都是真实的(例如,!"hi"false
  3. 这就是我在上面使用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