配列から値のすべての出現を削除する最も速い方法は、それを最も速くスプライスすること、またはより速くフィルターすることです。

キング

以下のようなので:

array.filter(i => i !== item) 

これは次のようなものよりも速いでしょうか

var i = array.length;

    while (i--) {
        if (array[i] === item) {
            array.splice(array.indexOf(item), 1);
        }
    }

パフォーマンスを見るとき。配列内の同じものの複数のインスタンスを削除したい

ShadowRanger

アルゴリズム的に、filter勝つはずです。単一の読み取りおよび書き込みパスを実行して、単一の新しいものArrayを順番に構築しO(n)ます。splice何があっても同じ量の読み取りを行う必要があり、書き込み作業は、配列の最初の1つの一致する値をつなぎ合わせるためだけに一致し、配列の最初の2つの要素を占める場合はほぼ2倍になります。O(n²)要素のインスタンスが増えると後続のスプライスの作業が減ることを考えると、実際にはあまり現実的ではないかもしれませんが、近いです(一致する要素のO(n²)配列のn後に一致しnない要素が続き、ダウンnタイムでコピーする必要がある動作が効果的にられます。nスプライス)。

実際にはどちらが速いかについては、テストする必要がありますが、大きな配列の場合はfilter、デフォルトで間違いなく優先します。spliceメモリが貴重なまれなケースでのみ勝つはずであり、コピーを回避すると違いが生じる可能性があります(非常に珍しい)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ