function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
var q = "The, 1, 2, Fox, Jumped, 3, Over, 4";
var z = q.trim().split(/\s*,\s*/).map(function(word) {
return isNumeric(word) ? Number(word) : word;
});
console.log(z);
这是怎么回事?
isNumeric
需要注意的是,您需要一种方法来检测什么是数字,什么不是数字。我建议使用此处展示的实现方式(与我的示例相同),因为它具有稳健性并且不会产生误报或漏报。很多答案会忽略一些有效数字(例如+3
或-3
),或将非数字的内容解析为数字(例如""
)。
假设您有一个名为isNumeric()
的函数,它返回一个布尔值,指示输入是否为数字。如果需要,您可能需要修改实现以适应您的需求,例如,如果您只想使用整数或只想使用正数。
分离单词
您的字符串需要被分割成单独的单词块。可以按以下方式完成:
var input = " The, 1, 2 , Fox , Jumped , 3, Over, 4 ";
input.trim() //make sure there are no beginning and ending spaces
.split(/\s*,\s*/); //split on a comma surrounded by any amount of spaces. That removes spaces from start/end of each of the words
//["The", "1", "2", "Fox", "Jumped", "3", "Over", "4"]
使用 .map
map() 方法 可以作用于一个数组,将其转换为一个新的数组。这是通过使用回调函数来转换每个元素来完成的。回调函数简单地检查一个单词是否实际上是一个数字 - 如果是,它会使用Number进行显式类型转换将其解析为数字。请注意,您不应该使用 new Number(word)
,因为它创建了一个 Number
对象,而不是数值原始类型。
值得注意的是,可以使用 +
运算符执行隐式转换。例如:
+"500" //500
+"hello" //NaN
在我的回答开头,你可以使用+word
代替Number(word)
,但是我认为显式转换更容易理解。
,
”拆分以获得您在问题中显示的输出。 - wizzwizz4/\s*,\s*
上进行分割 - 这样无论有多少空格以及它们放置的位置都不会影响。除非对字符串的构造方式有绝对的确定性,并且它永远不会有任何其他格式。 - VLAZ/
! - wizzwizz4