我有一个字符串,比如说
var Str = 'My name is 123 and my name is 234'
。
现在我将其拆分为
var arrStr = Str.split(' ');
我遍历数组并具有不同的逻辑,具体取决于单词是字符串还是数字。我该如何检查?我试过typeof
这对我不起作用。
修改
看到多个答案后。现在,我绝望,这是最有效的方式吗?
答案 0 :(得分:6)
如果你只关心数字,那么你可以使用这样的正则表达式而不是使用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)
然后逐个迭代它们,并使用@CMS在此isNumeric()
中发布的着名famous question函数检查给定字符串是否为数字。
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
注意:感谢@Pointy,如果您想将它们作为数字,input.match(/\d+/g).map(Number)
。
答案 1 :(得分:2)
您需要尝试将数组值转换为整数。
要迭代它们,您可以使用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... */
}
}
答案 2 :(得分:1)
阐述Sniffer的回答......
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
}
答案 3 :(得分:0)
在研究时,我发现了Number()
对象。这通常用于处理数字。 MDN有很好的文档。
我发现Number()
在未传递数字时返回NaN
(非数字)。由于没有数字返回NaN,这可能是检查传递的对象是字符串还是数字文字的好方法。
所以我的代码是:
if (Number(arrStr[i]) == NaN){
//string
} else {
//number
}