2016-06-14 10 views
0

私はS3に格納されているいくつかのXMLファイルを扱っています。私はNodeでxml2jsモジュールを使ってXMLを解析し、その中に.jpgを持つ文字列を抽出します。私はフィルタメソッドを使用していたし、自分自身のforループを使用してみましたが、それはいつでも剃ることはありませんでした。コードのこのセクションを書くより速い方法があるか、これを行うための最も速い方法です。どんな助けもありがたい。JavaScriptで文字列の配列をフィルタする最速の方法

使用してフィルタ方式:

//this took 52393ms 
var file = JSON.stringify(data); 
var arrayOfStrings = file.split('"'); 
var images = arrayOfStrings.filter(function(str) { 
    return str.indexOf('.jpg') !== -1; 
}); 
resolve(images); 

forループを使用して:私は( '"')file.splitを使用した後

//this took 52681ms 
var file = JSON.stringify(data); 
var arrayOfStrings = file.split('"'); 
var images =[]; 
for(let i = 0; i < arrayOfStrings.length; i++) { 
    if(arrayOfStrings[i].indexOf('.jpg') !== -1) { 
     images.push(arrayOfStrings[i]); 
    } 
} 
resolve(images); 

データは、次のようになります。

[ '{','rstuv',':{','options',':[{','![alt](CKrgUgiYMflaWnsGZ009.jpg)']]; 
+1

'let'の代わりに' var'を使って 'for'を試してください。 'let'は繰り返しごとに新しい変数を作成します。 – Rajesh

+4

あなたの初期データの例を教えてください。 – Foker

+2

プロファイラを使用して、時間の正確な場所を確認します。実際の原因であるJSONシリアライゼーションになる可能性があります – alex

答えて

5
var file = JSON.stringify(data); 
var arrayOfStrings = file.split('"'); 

しないでください。データを検索したい場合は、それを構造化したままにしておきます。その文字列をストリング化して検索するだけで、(文字列に引用符が含まれていると)一連の間違いが発生するだけでなく、適切な文字列でもない配列要素がたくさんあり、元のXMLファイルをテキストとして読み込むだけではほとんど改善されませんそれを直接検索する。

代わりに、単に反復(または必要に応じて再帰的に)文字列のdataオブジェクト(詳細はAccess/process (nested) objects, arrays or JSONを参照)、およびフィルタを介して(とプロパティ名?)あなたがそれらを期待するこれらの場所で。これはずっと速くなります。

+0

さて、私はそれを見ていきます、Bergiに感謝します – nasoj1100

+0

S3からのXMLの取得は時間の大部分を占めるようです。しかし、私はさらに7〜8秒を切ることができた。ご協力いただきありがとうございます。 – nasoj1100

関連する問題