2

Colladaファイル形式には、float / int/boolean値の空白で区切られたリストとして格納される大量のデータが含まれています。これらのリストは巨大になる可能性があります。これらのリストは、おおよそ次のコードを使用してJavaScriptで解析されます。

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

しかし、これは、巨大な入力文字列が数千の個別の小さな文字列に分割されるため、多くのゴミを生成します。それを回避する方法はありますか?parseFloat()関数のようなもので、既存の文字列内のオフセットを指すことができるので、ガベージの生成を避けます。

4

3 に答える 3

2

この関数は、複数の空白と、floatとして解析されない入力を処理できます。

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] );
}
于 2012-11-26T11:54:42.147 に答える
1

これはどう?

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

5,10目的の文字列チャンクの開始オフセットと終了オフセットはどこにありますか。

于 2012-11-26T11:36:52.087 に答える