以下のようなので:
array.filter(i => i !== item)
これは次のようなものよりも速いでしょうか
var i = array.length;
while (i--) {
if (array[i] === item) {
array.splice(array.indexOf(item), 1);
}
}
パフォーマンスを見るとき。配列内の同じものの複数のインスタンスを削除したい
アルゴリズム的に、filter
勝つはずです。単一の読み取りおよび書き込みパスを実行して、単一の新しいものArray
を順番に構築しO(n)
ます。splice
何があっても同じ量の読み取りを行う必要があり、書き込み作業は、配列の最初の1つの一致する値をつなぎ合わせるためだけに一致し、配列の最初の2つの要素を占める場合はほぼ2倍になります。O(n²)
要素のインスタンスが増えると後続のスプライスの作業が減ることを考えると、実際にはあまり現実的ではないかもしれませんが、近いです(一致する要素のO(n²)
配列のn
後に、一致しn
ない要素が続き、ダウンn
タイムでコピーする必要がある動作が効果的に見られます。n
スプライス)。
実際にはどちらが速いかについては、テストする必要がありますが、大きな配列の場合はfilter
、デフォルトで間違いなく優先します。splice
メモリが貴重なまれなケースでのみ勝つはずであり、コピーを回避すると違いが生じる可能性があります(非常に珍しい)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加