当前位置: 首页 > 知识库问答 >
问题:

在JavaScript中高效解析字符串到浮点数组

司寇高洁
2023-03-14

Collada文件格式包含大量数据,这些数据存储为以空格分隔的float/int/boolean值列表。这些清单可能是巨大的。我们大致使用以下代码在JavaScript中解析这些列表:

var floats = input.split(' ').map(parseFloat)

但是这会产生很多垃圾,因为巨大的输入字符串被拆分成成千上万个单独的小字符串。有没有办法避免这种情况?类似于parseFloat()函数,我可以指向现有字符串中的偏移量,从而避免产生垃圾。

共有3个答案

赫连淳
2023-03-14

这个怎么样?

parseFloat(input.substring(5,10));

其中5,10是所需字符串块的开始和结束偏移量。

红富
2023-03-14

此函数可以处理多个空格以及不作为浮点解析的输入。

input = "123 123 123  foo", start = 0, end = 0, result = [], num;

// empty string evaluates to false
while( end < input.length ) {
    end = input.indexOf(" ", start );
    // -1 => only one element in input || end of the string has been reached
    if( end === -1 ) { end = input.length }
    num =  parseFloat( input.substring( start, end ) );
    // Should extracted string fail to parse then skip
    if( num ) result.push( num ); 
    // move forward or end will match current empty space
    start = end + 1;
}

result[2] // => "123";

在这里拉小提琴

使现代化

刚刚灵机一动。不要使用map函数,只需使用通过拆分字符串创建的数组,如下所示:

var floats = input.split(' ');
for( var i = 0, len = input.length; i < len; i++ ) {
    input[i] = parseFloat( input[i] );
}
甄成弘
2023-03-14

如果你用一个空格作为字符串的前缀,你可以用它来得到字符串中的第一个数字:

var start = 0 // Initial search offset.
var firstOccurence = input.indexOf(' ', start);
//Get the substring from the first occurrence of ' ' after start, to the next one, and parse it as a float.
parseFloat(input.substring(firstOccurence , input.indexOf(' ', firstOccurence+1)));

然后,您可以使用以下命令从字符串中获取之后的数字:

firstOccurence = t.indexOf(' ', firstOccurence+1);
parseFloat(t.substring(firstOccurence , t.indexOf(' ', firstOccurence+1)));

在循环中使用它,您可以在列表中搜索,并且可以开始在指定索引处搜索列表。但是,你不能要求列表中的第七个浮点数,例如。唯一可靠的方法是使用。拆分(“”),或在循环中使用上述代码。

要在输入中查找nth浮点,可以使用以下命令:

for(var i = 0, previousIndex = 0; i < n; i++){
    previousIndex = input.indexOf(' ', previousIndex + 1);
}
var float = parseFloat(input.substring(previousIndex, input.indexOf(' ',  previousIndex + 1)));
 类似资料:
  • rank ▲ ✰ vote url 33 526 73 660 url 把字符串解析成浮点数或者整数 在Python里,怎么样把一个数字型字符串像"545.2222"解析成对应的浮点值545.2222?或者把一个"31"解析成31? 我只是想知道怎么样才能解析一个浮点型字符串编程浮点数,或者整型字符串转换成整型? >>> a = "545.2222" >>> float(a) 545.222200

  • 问题内容: 有谁知道如何解析所需格式的日期字符串? 问题答案: 看到: Mozilla Core JavaScript参考:Date对象 Mozilla核心JavaScript参考:String.Split 码:

  • 是否有一个内置的javascript函数可以解析: 到 或者我必须为此编写自定义函数吗?

  • 问题内容: 我正在处理一种加密货币RPC并接收json数据,如下所示: 使用Jsoncpp库或json11会将数字解析为。发生这种情况时,由于双重精度问题,结果为:。总的来说,这对金融交易来说是灾难性的,是不可接受的。 我已经有一个定点库,可以使用有效的字符串并将其在内部视为整数。有没有一种方法可以使Jsoncpp(或其他任何json库)将选定的数字json值用作字符串,以便可以使用固定精度正确地

  • 问题内容: 我不知道如何在了解i18n语言环境的基础上,如何对“ float-string”解析为浮点数,而不是对该字符串做任何假设。 例如:德国人像我一样,写“ 1.234,87”,而美国人写“ 1,234.87”。在我的项目中,我确实知道我希望使用哪种语言环境,但是我不想“硬编码”关于该本地语言如何编写这些内容的假设。 我不喜欢做regexp / stringreplacements。 有没有

  • 问题内容: 正如标题所说。我不认为有可能这样做,但如果可以告诉我。 这是我正在编写的bukkit(minecraft服务器)插件所必需的。我要执行一个命令:tnt [power]。电源是我想转换为浮点数的返回字符串。 谢谢 问题答案: 用于进行转换。 和之间的区别只是回报。如果需要(对象),请使用前者;如果要数字,请使用后者。