めぐの JavaScript 日記

あーもんど

配列のコピーは concat() を使うと高速

今までスプレッド構文使ってたけど Array.prototype.concat() を使う方が圧倒的に速かった。ただ実行環境に左右されそう。どうせ for 文が一番速いけど短く書くなら concat かな。slice も遅かった。

配列のコピー

コード

const createArray = (size, mapfunc) => {
    const r = [];
    r.length = size;
    for (let i = 0; i < r.length; ++i) r[i] = mapfunc(i);
    return r;
};
 
// 10万回繰り返して実行時間を測る
const measure = f => {
    const x = Date.now();
    for (let i = 0; i < 1e5; ++i) f(i);
    console.log(Date.now() - x, "ms");
};
 
const a = createArray(10000, i => i);
 
// スプレッド構文
// Node.js : 1889ms; Chrome : 42835ms
measure(() => {
    const copy = [...a];
});
 
// 空の配列と結合
// Node.js : 823 ms; Chrome : 471ms
measure(() => {
    const copy = [].concat(a);
});
 
// 引数なしで concat()
// Node.js : 659ms; Chrome : 444ms
measure(() => {
    const copy = a.concat();
});


日記 (おまけ)

雑談だけした気がする