我有一个字符串:
string = "[x,y,z]"
其中x
,y
和z
是有效的javascript浮动字符串。一些例子:
-0.9999
1.
1.00000000000E-5
-1E5
将此字符串解析为浮动的实际javascript数组而不使用Eval 的最有效(最快)方法是什么?
现在我这样做:
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
,这看起来很完美,但它会为第二个示例1.
返回 SyntaxError ,其中小数点分隔符后面没有任何内容。
我准备 a fiddle 进行测试。
答案 0 :(得分:2)
答案 1 :(得分:1)
试试这个:
str = "[-0.9999, 1., 1.00000000000E-5,-1E5]";
str.slice(1, str.length-1).split(',').map(Number);
// [-0.9999, 1, 0.00001, -100000]
答案 2 :(得分:0)
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。
答案 3 :(得分:0)
您可以随时使用内置于array.prototypes中的javascript,而不是编写for循环。
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;}));
答案 4 :(得分:-1)
提取效率最高的是替换和分裂。
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