以下是我正在执行的任务的描述:
编写一个名为 countNumbers 的函数,它接受一个字符串数组。该函数应返回数组中可以成功转换为数字的字符串数量。例如,字符串“1”可以成功转换为数字1,但字符串“hello”无法转换为数字。
countNumbers(['a','b','3','awesome','4']); // 2
countNumbers(['32', '55', 'awesome', 'test', '100']); // 3
countNumbers([]); // 0
countNumbers(['4','1','0','NaN']); // 3
countNumbers(['7', '12', 'a', '', '6', '8', ' ']); // 4
我的代码:
function countNumbers(arr) {
var count = 0;
for (num in arr) {
if (Number(arr[num]) !== NaN) {
count++;
}
}
return count;
}
当我控制台日志 (Number(arr[num]) 时,我确实在控制台中看到 NaN,但是当我在循环中进行比较时,计数变量不会增加,最终返回值等于数组的长度。
非常感谢任何有关我可能做错的事情或我忽略的事情的提示。
最佳答案
您可以使用 isFinite
进行过滤并计算长度。
+'' -> 0 +' ' -> 0
function countNumbers(array) {
return array.filter(isFinite).length;
}
console.log(countNumbers(['a','b','3','awesome','4'])); // 2
console.log(countNumbers(['32', '55', 'awesome', 'test', '100'])); // 3
console.log(countNumbers([])); // 0
console.log(countNumbers(['4','1','0','NaN'])); // 3
console.log(countNumbers(['7', '12', 'a', '', '6', '8', ' '])); // 4, now 6
如果您确实只喜欢数字,那么您可以使用正则表达式进行检查。
function countNumbers(array) {
return array.filter(RegExp.prototype.test, /^\d+$/).length;
}
console.log(countNumbers(['a','b','3','awesome','4'])); // 2
console.log(countNumbers(['32', '55', 'awesome', 'test', '100'])); // 3
console.log(countNumbers([])); // 0
console.log(countNumbers(['4','1','0','NaN'])); // 3
console.log(countNumbers(['7', '12', 'a', '', '6', '8', ' '])); // 4
关于javascript - 检查数组内可以成功转换为数字的字符串数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60355456/