我有一个字符串,说
var Str = 'My name is 123 and my name is 234'
.
现在我把它分成
var arrStr = Str.split(' ');
我遍历数组并根据单词是字符串还是数字具有不同的逻辑。我该如何检查?我试过typeof
这对我不起作用。
编辑:
在看到多个答案后。现在,我很绝望,哪种方法最有效?
我有一个字符串,说
var Str = 'My name is 123 and my name is 234'
.
现在我把它分成
var arrStr = Str.split(' ');
我遍历数组并根据单词是字符串还是数字具有不同的逻辑。我该如何检查?我试过typeof
这对我不起作用。
编辑:
在看到多个答案后。现在,我很绝望,哪种方法最有效?
如果您只关心数字,那么您可以使用如下正则表达式而不是使用 split:
var input = "My name is 123 and my name is 234";
var results = input.match(/\d+/g)
如果您关心所有部分,那么您可以使用另一个表达式来查找所有非空格字符,如下所示:
var input = "My name is 123 and my name is 234";
var results = input.match(/\S+/g)
然后逐个迭代它们,并使用isNumeric()
@CMS 在这个著名问题中发布的著名函数检查给定字符串是否为数字。
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
注意:感谢@Pointy,如果您希望它们作为数字,input.match(/\d+/g).map(Number)
.
您需要尝试将数组值转换为整数。
要迭代它们,您可以使用for
循环:
for(i=0;i<arrStr.length;i++) {
var result = !isNaN(+arrStr[i]) ? 'number' : 'string';
console.log(result);
}
在这里,我使用一元+
来尝试将每个数组值的值转换为数字。如果失败,结果将是NaN
. 然后我使用 JavaScript 的isNaN()
方法来测试这个值是否为NaN
. 如果不是,那么它是一个数字,否则它是一个字符串。
使用您提供的字符串的结果是:
string
string
string
number
string
string
string
string
number
要在if
语句中使用它,我们可以简单地:
for(i=0;i<arrStr.length;i++) {
if(isNaN(+arrStr[i])) {
/* Process as a string... */
}
else {
/* Process as a number... */
}
}
阐述嗅探器的答案......
var input = "My name is 123 and my name is 234";
var numberArray = input.match(/\d+/g);
var wordArray = input.match(/[A-Za-z]+/g);
for (var number in numberArray)
{
//do something
}
for (var word in wordArray)
{
//do something
}
在研究的过程中,我发现了这个Number()
物体。这通常用于处理数字。MDN有一个很好的文档。
我发现未传递数字时Number()
返回NaN
(非数字)。由于没有数字返回 NaN,这可能是检查传递的对象是字符串还是数字文字的好方法。
所以我的代码是:
if (Number(arrStr[i]) == NaN){
//string
} else {
//number
}