javascript - 检查数组内可以成功转换为数字的字符串数量

标签 javascript arrays loops comparison nan

以下是我正在执行的任务的描述:

编写一个名为 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/

相关文章:

javascript - 比较 YUI 和 Ext JS

javascript - 尝试将 html 标记发送到服务器时,Ajax 调用不起作用

python - 数组上的 Cython 最小值和最大值

Javascript 函数在 for 循环中不起作用

javascript - 我应该在 string.replace 之前进行 regexp.test 吗?

php - 无限滚动多列?

javascript - 获取与当前日期最接近的日期 (javascript)

PHP根据一个字段的值将数组分成几组

python - 如何制作前一个值不满足条件的索引数组?

jQuery 循环和附加点击事件