检查一个数组是否只包含数字值

22

我有一些数组,例如:

var arrayVal_Int = ["21", "53", "92", "79"];   
var arrayVal_Alpha = ["John", "Christine", "Lucy"];  
var arrayVal_AlphaNumeric = ["CT504", "AP308", "NK675"];
  • 应将arrayVal_Int视为(纯)数字。
  • arrayVal_AlphaarrayVal_AlphaNumeric应视为字符串。

我需要在JavaScript中检查。


2
有任何尝试解决的吗? - Tushar
欢迎来到 Stack Overflow。请访问 [帮助] 查看如何提问,但在提问之前,请在此处搜索“测试数组数字”。 - mplungjan
一个数组通常包含多个值。您想知道这个数组是否仅包含数字值吗? - Touffy
尝试使用循环遍历数组并应用parseInt函数,以查看它是否返回true。 - Nishanth Matha
@Touffy.yes. 我需要检查数组是否纯数值。 - karthic4info
4个回答

93

最短的解决方案,如果每个项目可以被(强制转换为)数字,则计算结果为true


!yourArray.some(isNaN)

1
@A.T. 请查看 http://kangax.github.io/compat-table/es5/#Array.prototype.some 以了解浏览器支持情况(基本上现在已经在所有地方都可以使用)。 - Touffy
刚学到这个,除了空字符串 "" 会在 isNaN 上呈现为 false。 - Mouser
1
@Mouser 空字符串会被转化为零,因此与“可强制转换为数字”的一致。如果需要,您可以使用更具体的谓词替换isNaN(在许多情况下不需要)。 - Touffy
如果存在空值,此解决方案将无法正常工作。 - Panteleimon.Kylish
这个解决方案完全按照它所说的做。与空字符串一样,null强制转换为零。如果您需要null使代码返回false,则需要使用更具体的替代方法来替换isNaN。 - Touffy

9

我有类似的需求,但想要确认列表中只包含整数(即没有小数)。根据以上回答,以下是一种实现方式,我发布出来以便其他需要类似检查的人参考。

感谢@Touffy提供的建议。

let x = [123, 234, 345];
let y = [123, 'invalid', 345];
let z = [123, 234.5, 345];

!x.some(i => !Number.isInteger(i))  // true
!y.some(i => !Number.isInteger(i))  // false
!z.some(i => !Number.isInteger(i))  // false

3
你可以简化为 x.every(Number.isInteger) 而不是使用双重否定 :) - Touffy
2
顺便说一句,如果有本地的isNumber函数,我会使用every。由于isNaN是isNumber的相反,而我想在不创建额外函数isNumber = n => !isNaN(n)的情况下使用它,所以我利用了∀|¬()等价于∄|()的逻辑事实。但是对于isInteger,您不必这样做。 - Touffy

2
使用简单的 JavaScript,您可以像这样做:
var IsNumericString = ["21","53","92","79"].filter(function(i){
    return isNaN(i);
}).length > 0;

它将返回true;


-1

试试这个:

let x = [1,3,46,7,7,8];
let y = [1,354,"fg",4];
let z = [1, 3, 4, 5, "3"];

isNaN(x.join("")) // false
isNaN(y.join("")) // true
isNaN(z.join("")) // false

2
这个不起作用。存在包含非数字字符串的序列,它们可以组成有效的数字字符串(例如 "1","e5"),反之亦然("1.2",".3")。 - Touffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接