web-dev-qa-db-ja.com

配列結合と文字列連結

どちらの方法が速いですか?

配列結合:

var str_to_split = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
var myarray = str_to_split.split(",");

var output=myarray.join("");

文字列連結:

var str_to_split = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
var myarray = str_to_split.split(",");

var output = "";
for (var i = 0, len = myarray.length; i<len; i++){
    output += myarray[i];
}
63
ajax333221

文字列の連結はECMAScriptで高速です。以下に、私が作成したベンチマークを示します。

http://jsben.ch/#/OJ3vo

42
AlienWebguy

私は間違いなくArray.join()を使用する方が速いと言うことができます。 JavaScriptコードのいくつかの部分に取り組み、配列を優先して文字列操作を削除することでパフォーマンスを大幅に向上させました。

8
Ryan Doherty

2011年から現代へ...

文字列連結を使用した次のjoin書き換えと、標準の実装よりも遅いことを参照してください。

// Number of times the standard `join` is faster, by Node.js versions:
// 0.10.44: ~2.0
// 0.11.16: ~4.6
// 0.12.13: ~4.7
// 4.4.4: ~4.66
// 5.11.0: ~4.75
// 6.1.0: Negative ~1.2 (something is wrong with 6.x at the moment)
function join(sep) {
    var res = '';
    if (this.length) {
        res += this[0];
        for (var i = 1; i < this.length; i++) {
            res += sep + this[i];
        }
    }
    return res;
}

教訓は-文字列を手動で連結せず、常に標準のjoinを使用することです。

7
vitaly-t

このGoogleドキュメントは 'JavaScriptコードの最適化' string concatは配列結合よりも遅いが、明らかにこれは当てはまらない最新のJavascriptエンジン。

フィボナッチテスト例のベンチマーク を作成しました。これは、文字列の連結(接着)がArrayjoinを使用した場合とほぼ4倍速いことを示しています。

2
Wilt

固定長の数値配列の場合、手動連結は高速です。

これら2つの操作をテストするJSPerfテスト

zxy.join('/')

// versus

zxy[0] + '/' + zxy[1] + '/' + zxy[2]

// given the array

zxy = [1, 2, 3]

// resulting in the string '0/1/2'

結果:Chrome 64.0.3282.186、Array.joinは46%遅くなりました。

1
Matthias Dailey