【问题标题】:issue with checking all element type of an Array in Javascript在Javascript中检查数组的所有元素类型的问题
【发布时间】:2017-06-29 00:44:41
【问题描述】:

我正在尝试检查 javascript 中数组的所有元素类型。我实际上正在编写一个只接受带有数字的数组的函数。

所以

[1,2,-3,-4,0]  //valid input
[1,2,-3b,-4a,0]  //Invalid input

我正在尝试通过使用javascript的every()函数来实现以下功能,

try {
                    if (!inputArr.every(x => typeof x === 'number')) {
                           throw 'input array should only have numbers';
                    }
                }
                catch (err) {
                    return err;
                }

但出现错误。当我进一步调查它而不是意识到这一点时,

typeof 1 // number
typeof 1a // error

所以我们无法检查字母数字值的类型。有人可以在这里提出一些选择吗?我使用的是纯 JavaScript ES5 或 ES6。

【问题讨论】:

  • 你也可以使用isNaN()
  • @Manatax 但是isNaN("123") 会返回false,即使"123" 不是数字。如果这适合 OP 的需求,那么它会起作用。如果目标是更严格的检查,那么typeof 似乎是要走的路。
  • @Manatax,我需要严格检查提供的输入数组是否只有所有数字。正如@Michael Geary 所说,isNan 在这里不起作用
  • 既然[1,2,-3b,-4a,0] 是无效的语法,你的程序甚至无法运行,我们是否应该假设输入是一种表示为字符串的数组,如"[1,2,-3b,-4a,0]"
  • @Akash 等等,你是说你的函数的输入是一个string,而不是一个array,而且这个字符串可能类似于@ 987654331@?那是一个完全不同的问题。我会首先使用JSON.parse() 尝试将此字符串转换为JavaScript 数组。如果它抛出异常,那么你有类似“-3a”的东西,应该拒绝。否则,在结果数组上运行测试循环。

标签: javascript typeof


【解决方案1】:

[1,2,-3b,-4a,0] 语法无效,您的程序甚至无法运行。因此,我们将假设输入是一个字符串,如"[1,2,-3b,-4a,0]"。在这种情况下:

function check(input) {
  try {
    const array = JSON.parse(input);
    return array.every(x => typeof x === 'number');
  } catch(e) {
    return false;
  }
}

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多