Javascript 正在检查数组中可成功转换为数字的字符串数
以下是我正在执行的任务的描述: 编写一个名为countNumbers的函数,该函数接受字符串数组。函数应返回数组中可成功转换为数字的字符串数的计数。例如,字符串“1”可以成功转换为数字1,但字符串“hello”不能转换为数字Javascript 正在检查数组中可成功转换为数字的字符串数,javascript,arrays,loops,comparison,nan,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 countNu
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;
}
当我使用控制台log(Number(arr[num])时,我确实在控制台中看到了NaN,但是当我在循环中进行比较时,count变量不会增加,最终返回的值等于数组的长度
任何关于我可能做错了什么或我忽略了什么的提示都非常感谢。两件事直截了当:
控制台。log
以将实际计数作为数字返回
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
可能会有更详尽或更智能的检查,但您可以轻松地修改isNum
函数,而无需触摸任何其他代码
无循环、无变量和关注点分离-isNum逻辑不与控制流混合
更新:Alex的答案中的parseFloat
检查是您正在寻找的更智能的检查
const isNum=maybeNum=>(typeof maybeNum=='number'| | typeof+maybeNum=='number')&&&!isNaN(+maybeNum)&&maybeNum!='&&maybeNum!='
const countNumbers=arr=>console.log(arr.filter(isNum).length)
countnumber(['a','b','3','awesome','4']);//2
countnumber(['32','55','awesome','test','100']);//3
countNumbers([]);//0
countNumbers(['4','1','0','NaN']);//3
countNumbers(['7','12','a','6','8','');/4
两件事直截了当:
控制台。log
以将实际计数作为数字返回
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
可能会有更详尽或更智能的检查,但您可以轻松地修改isNum
函数,而无需触摸任何其他代码
无循环、无变量和关注点分离-isNum逻辑不与控制流混合
更新:Alex的答案中的parseFloat
检查是您正在寻找的更智能的检查
const isNum=maybeNum=>(typeof maybeNum=='number'| | typeof+maybeNum=='number')&&&!isNaN(+maybeNum)&&maybeNum!='&&maybeNum!='
const countNumbers=arr=>console.log(arr.filter(isNum).length)
countnumber(['a','b','3','awesome','4']);//2
countnumber(['32','55','awesome','test','100']);//3
countNumbers([]);//0
countNumbers(['4','1','0','NaN']);//3
countNumbers(['7','12','a','6','8','');/4
对其进行缩减并计算边缘情况
console.log(countnumber(['a','b','3','awesome','4']);//2
log(countnumber(['32','55','awesome','test','100']);//3
console.log(countnumber([]);//0
log(countnumber(['4','1','0','NaN');//3
log(countNumbers(['7','12','a','6','8','');//4
函数CountNumber(数组字符串){
返回arrayStrings.reduce((count,string)=>isNaN(string)| | string.trim()==''count:count+1,0)
}
减少覆盖范围并评估边缘情况
console.log(countnumber(['a','b','3','awesome','4']);//2
log(countnumber(['32','55','awesome','test','100']);//3
console.log(countnumber([]);//0
log(countnumber(['4','1','0','NaN');//3
log(countNumbers(['7','12','a','6','8','');//4
函数CountNumber(数组字符串){
返回arrayStrings.reduce((count,string)=>isNaN(string)| | string.trim()==''count:count+1,0)
}
您可以使用过滤并获取长度
函数countNumbers(数组){
返回数组.filter(isFinite).length;
}
log(countnumber(['a','b','3','awesome','4']);//2
log(countnumber(['32','55','awesome','test','100']);//3
console.log(countnumber([]);//0
log(countnumber(['4','1','0','NaN');//3
log(countNumbers(['7','12','a',''6','8','');/4,现在是6
您可以使用它进行筛选并获取长度
函数countNumbers(数组){
返回数组.filter(isFinite).length;
}
log(countnumber(['a','b','3','awesome','4']);//2
log(countnumber(['32','55','awesome','test','100']);//3
console.log(countnumber([]);//0
log(countnumber(['4','1','0','NaN');//3
log(countNumbers(['7','12','a',''6','8','');/4,现在是6
我认为使用reduce
可以做到这一点
const countNumbers=arr=>{
返回arr.reduce((acc,value)=>isNaN(Number(value))?acc:acc+1,0)
}
const num=countNumbers(['a','b','3','awesome','4']);
console.log(num)
我认为使用reduce
可以做到这一点
const countNumbers=arr=>{
返回arr.reduce((acc,value)=>isNaN(Number(value))?acc:acc+1,0)
}
const num=countNumbers(['a','b','3','awesome','4']);
log(num)
过滤数组并获取其长度
console.log(countnumber(['a','b','3','woody','4']);//2
log(countnumber(['32','55','awesome','test','100']);//3
console.log(countnumber([]);//0
log(countNumbers(['4','1','0','NaN']);//3
log(countNumbers(['7','12','a','6','8','');//4
函数计数编号(arr){
返回阵列过滤器(功能(el){
返回浮点数(el)=el;
}).长度;
}
过滤数组并获取其长度
console.log(countnumber(['a','b','3','awesome','4']);//2
控制台
function countNumbers(array) {
let count = 0
for (number of array) {
if(typeof number === 'number') {
count++
} else if(typeof number === 'string') {
let isNumber
let numberCharacters = number.split('')
const numberRegularExpression = new RegExp(/[0-9]/)
for(character of numberCharacters) {
if(numberRegularExpression.test(character) !== true) {
isNumber = false
break
} else {
isNumber = true
}
}
if(isNumber === true) count++
}
}
return count;
}