编写函数以读取大量CSV数据集。 可以将CSV解析为字符串数组(请参阅Javascript code to parse CSV data)。
现在想要每个列,如果它们都可以转换为数字,则将它们转换为Number,否则保留为String。但如果没有,请将它们留作字符串。
当然,数字可以有多种格式,有些可能依赖于语言环境。我想要一个像parseFloat这样的函数来识别这些:
"2.0" -> 2.0
"2" -> 2.0
"1,532" -> 1532 (in US at least)
"$2.00" -> 2.0
"0.02" -> 0.02
"2%" -> 0.02
"" - null
"NaN" -> NaN
"""NaN""" -> String
"2 years old" -> String
"ABC123" -> String
parseFloat(val)
不能用于此目的:
parseFloat("1,523") === 1
parseFloat("2%") === 2 // could live with this
parseFloat("$2.25") === NaN
这显然太过于期待原生的ECMAscript函数处理,但似乎我不应该自己为这些中的每一个发明正则表达式。
可能有一个图书馆做得好吗?我的Google搜索技巧似乎在这里失败了。
处理常见日期格式会更好。
答案 0 :(得分:1)
正如您和其他人所指出的,这个问题可以通过正则表达式来解决。但是如果你想让一个库为你做,jQuery Number Formatter库应该允许你做你想要的。它处理数字(包括百分比)但不处理日期:https://code.google.com/p/jquery-numberformatter/
它需要jQuery和jshashtable。
答案 1 :(得分:1)
只需使用简单的正则表达式并将其包装起来,非常简单
例如:
function parseToNumeric(value) {
return parseFloat(value.replace(/[\$,%]/g, ''));
}