我需要一种方法来检查数组是否只包含数字。 例如
var a = [1,2,3,4] should pass and give true boolean
whereas var b = [1,3,4,'a'] should give false
我尝试将forEach()函数作为
a.forEach(function(item, index, array) {
if(!isNaN(item)) {
array.unshift("-");
}
}); //console.log of this will give array a = ["-","-","-","-", 1,2,3,4]
但是因为,forEach()遍历数组中的每个索引,并且因为var a的每个项都是一个数字,所以它会对它迭代的每个项目进行数组的取消。如果整个数组值是一个数字,我需要一种方法只取消“ - ”一次。
我也尝试过test()
var checkNum = /[0-9]/;
console.log(checkNum.test(a)) //this gives true
console.log(checkNum.test(b)) // this also gives true since I believe test
//only checks if it contains digits not every
//value is a digit.
答案 0 :(得分:5)
最简单的方法是使用every
的{{1}}函数:
Array
答案 1 :(得分:2)
尝试这样的事情:
var a = arr.reduce(function(result, val) {
return result && typeof val === 'number';
}, true);
function areNumbers(arr) {
document.write(JSON.stringify(arr) + ':')
return arr.reduce(function(result, val) {
return result && typeof val === 'number';
}, true);
}
document.write(areNumbers([1, 2, 3, 4]) + '<br>');
document.write(areNumbers([1, 2, 3, '4']) + '<br>');
&#13;
答案 2 :(得分:0)
var filteredList = a.filter(function(item){ return !isNaN(+item) });
开头的+符号会尝试将项目的任何内容转换为数字,如果可以,则不会将其过滤掉,例如:
var numbers = +"123"
console.log(numbers) //will print out 123 as numbers not as a string