0

编写一个函数来读取大量 CSV 数据集。可以很好地将 CSV 解析为字符串数组(请参阅解析 CSV 数据的 Javascript 代码)。

现在想可以每一列,如果它们都可以转换为数字,则将它们转换为数字,否则保留为字符串。但如果没有,请将它们保留为字符串。

当然,数字可以有多种格式,有些可能取决于语言环境。我想要一个像 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 函数能够处理,但似乎我也不应该自己为每一个发明正则表达式。

可能有一个图书馆做得很好吗?我的谷歌搜索技能在这里似乎失败了。

处理常见的日期格式会更好。

4

2 回答 2

1

正如您和其他人所指出的,这个问题可以用正则表达式来解决。但是如果你想要一个库来为你做这件事,jQuery Number Formatter 库应该允许你做你想做的事。它处理数字(包括百分比)但不处理日期:https ://code.google.com/p/jquery-numberformatter/

它需要 jQuery 和 jshashtable。

于 2013-03-14T19:24:23.033 回答
1

只需使用一个简单的正则表达式并将其包装起来,非常简单

例如:

function parseToNumeric(value) {
    return parseFloat(value.replace(/[\$,%]/g, ''));
}
于 2013-03-14T19:25:26.967 回答