分析表示浮点数数组的字符串



我有一个这样的字符串:

string = "[x,y,z]"

其中xyz是有效的 javascript 浮点数作为字符串。一些例子:

-0.9999
1.
1.00000000000E-5
-1E5

在不使用 Eval 的情况下将此字符串解析为实际的 javascript 浮点数数组的最有效(最快)方法是什么?

现在我这样做:

parseFloatArray = function(string){
    // isolate string by removing square brackets
    string = string.substr( 1, string.length-2 )
    // create array with string split
    var array = string.split(',');
    // parse each element in array to a float
    for (var i = 0, il = array.length; i < il; i++){
        array[i] = parseFloat(array[i]);
    }
    // return the result
    return array
}
对于

上述示例,解决方案必须正常工作,这一点很重要。

我也尝试了一开始看起来很完美的JSON.parse,但它为第二个示例返回了一个 SyntaxError 1.其中小数分隔符后面没有任何内容。

我准备了一个小提琴进行测试。

而不是这个

array[i] = parseFloat(array[i]);

尝试 array[i] = +array[i];

上面很好地处理了所有测试用例。

这是工作小提琴

试试这个:

str = "[-0.9999, 1., 1.00000000000E-5,-1E5]";
str.slice(1, str.length-1).split(',').map(Number);
// [-0.9999, 1, 0.00001, -100000]
parseFloat的基本

语法是parseFloat(string)。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseFloat

如果您认为输入值只是数字,则可以使用 Number(x) 而不是 parseFloat。

此外,您可能会在解析时获得不同的值,因为所有浮点数学都基于 IEEE [754] 标准。 所以使用 toPrecision() 方法来自定义你的值 - https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Number/toPrecision。

与其编写 for 循环,不如始终使用 array.prototype 中内置的 javascript。

var string = "[1.,-0.9999,-1.00000E-5]";
var array = string.substr( 1, string.length-2 ).split(',');
console.log(array.map(function(i){return parseFloat(i);}));

你也可以使用一元运算符代替parseFloat()。

console.log(array.map(function(i){return +i;}));

最有效的提取是替换和拆分。

var str = "[312.413,436.6546,34.1]"; // string
str = () => str.replace(/[|]/g, "").split(","); //[312.413, 4...] Array

最有效的解析只是在字符串前面加上"+",这将对其进行计数,并且由于 JavaScript 将浮点数作为原语(而不是整数)处理,因此它们将被自动解析。

var a = "1.00000000000E-5";
console.log( +a ); // 0.00001

最新更新