国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ ウェブフロントエンド jsチュートリアル Set.has() が Array.includes() よりも項(xiàng)目の検索が速い理由

Set.has() が Array.includes() よりも項(xiàng)目の検索が速い理由

Nov 06, 2024 am 06:09 AM

Why Set.has() is Faster Than Array.includes() for Finding Items

アプリケーションを構(gòu)築するとき、特に大規(guī)模なデータセットやリアルタイム要件を扱う場(chǎng)合、パフォーマンスが鍵となるか、少なくとも重要な推進(jìn)力になることがあります。 JavaScript での最も一般的なタスクの 1 つは、コレクションに値が存在するかどうかを確認(rèn)することです。最もよく使用される 2 つの代替手段は、Array.includes() と Set.has() です。どちらも機(jī)能しますが、実際には Set.has() の方が Array.includes よりも機(jī)能します。この理由を詳しく調(diào)べて、どちらかの代替手段をいつ使用するべきかを判斷しましょう。

Array.includes() と Set.has() の理解

使用方法は非常に簡(jiǎn)単に見えますが、実裝が異なる 2 つのメソッド、つまり Array.includes() と Set.has() があります。

Array.includes()

includes() メソッドは、指定された値が配列內(nèi)に存在するかどうかを確認(rèn)します。
O(n) の時(shí)間計(jì)算量を利用しており、配列の長(zhǎng)さが長(zhǎng)いほど値のチェックにかかる時(shí)間が長(zhǎng)くなります。
これは、Array.includes() が配列を最初から最後まで (または値が見つかるまで) 検索し、配列が大きくなるほど時(shí)間がかかるためです。

Set.has()

Set の has() メソッドは、指定された値が存在するかどうかもチェックしますが、はるかに高速に実行されます。
Set.has() は、定數(shù)時(shí)間のルックアップ、つまり O(1) 時(shí)間の計(jì)算量を可能にするハッシュ テーブル ベースの構(gòu)造に依存しています。
配列とは異なり、set は一意の値を処理するように構(gòu)築されているため、內(nèi)部に重複した値が含まれず、検索時(shí)間が長(zhǎng)くなります。

大規(guī)模なデータセットでは Set.has() の方が高速な理由

Set.has() を使用すると、セット內(nèi)の項(xiàng)目の數(shù)に関係なく、JavaScript は 1 回の直接操作で項(xiàng)目を見つけることができます。たとえば、値が 100 萬(wàn)を含むセット內(nèi)にあるかどうかをチェックする場(chǎng)合、Set.has() にかかる時(shí)間は 10 をチェックする場(chǎng)合とまったく同じになります。

一方、Array.includes() は、目的の項(xiàng)目が見つかるか、最後に到達(dá)するまで、各要素を左から右に順番に調(diào)べます。つまり、サイズが長(zhǎng)くなるほど、特に終わりに近いアイテムの場(chǎng)合や、問(wèn)題のアイテムがそこにない場(chǎng)合には、チェックに時(shí)間がかかることになります。

例を詳しく見てみましょう:

const bigArray = Array.from({ length: 1000000 }, (_, i) => i);
const bigSet = new Set(bigArray);

const valueToFind = 999999;

// Array.includes (O(n)) - Slower for large arrays
console.time("Array.includes");
bigArray.includes(valueToFind);
console.timeEnd("Array.includes");

// Set.has (O(1)) - Faster for large sets
console.time("Set.has");
bigSet.has(valueToFind);
console.timeEnd("Set.has");

これを?qū)g行すると、大規(guī)模な配列では Set.has() が Array.includes() よりもはるかに優(yōu)れたパフォーマンスを発揮することがわかります。実際には、その違いはアニメーションのスムーズ化、読み込み時(shí)間の短縮、またはサーバー上のリソース使用量の削減につながる可能性があります。

Set.has() と Array.includes() を使用する場(chǎng)合

これはすべて、あなたが何を達(dá)成しようとしているかによって異なります。簡(jiǎn)単な概要は次のとおりです:

次の場(chǎng)合は Set.has() を使用します。

  • あなたはビッグデータを扱っており、多くの検索を行っています。
  • 一意のユーザー ID、タグ、キーワードのセットなどの一意の値を操作しています。
  • 配列を
  • に変換するための初期費(fèi)用が少額であっても気にする必要はありません。
  • 後で検索の數(shù)を最小限に抑えるように設(shè)定します。

次の場(chǎng)合は Array.includes() を使用します。

  • データセットは小さいため、パフォーマンスの差は無(wú)視できます。
  • 項(xiàng)目を確認(rèn)する必要があるのは 1 回か數(shù)回だけであるため、セットを作成するメリットはありません。
  • セットでは処理できない重複を扱っています。

使用例

ブロックされた単語(yǔ)のリストに対して名前をフィルターするユーザー検索機(jī)能を?qū)g裝していると想像してください。ブロックされている?yún)g語(yǔ)が何百もあり、頻繁に検索している場(chǎng)合は、ブロックされている?yún)g語(yǔ)にセットを使用すると、各検索チェックを高速化できます。

const bigArray = Array.from({ length: 1000000 }, (_, i) => i);
const bigSet = new Set(bigArray);

const valueToFind = 999999;

// Array.includes (O(n)) - Slower for large arrays
console.time("Array.includes");
bigArray.includes(valueToFind);
console.timeEnd("Array.includes");

// Set.has (O(1)) - Faster for large sets
console.time("Set.has");
bigSet.has(valueToFind);
console.timeEnd("Set.has");

小規(guī)模なケースであっても、セットは物事を効率的かつ予測(cè)可能に保つのに役立ちます。さらに、ブロックされる?yún)g語(yǔ)のリストが増えても、スケーラブルなソリューションがすでに用意されています。

重要なポイント

  • パフォーマンス: Set.has() は O(1) の時(shí)間計(jì)算量を提供し、大規(guī)模なコレクションの場(chǎng)合は O(n) の Array.includes() よりもはるかに高速になります

  • 適合性: セットは一意の値用に設(shè)計(jì)されているため、検索用に自然に最適化されます。配列は重複値に対してより柔軟ですが、存在のチェックが遅くなります。

  • スケーラビリティ: データが増加すると、Set.has() は引き続き良好なパフォーマンスを示しますが、Array.includes() は遅くなります。

最終的な考え

Set.has() と Array.includes() のどちらかを選択する場(chǎng)合は、データセットのサイズと性質(zhì)を理解しておくことが常に重要です。 Array.includes() は小さなデータセットにはまったく問(wèn)題ありませんが、速度が重要な狀況では Set.has() が貴重なツールです。適切なデータ構(gòu)造は、コードに大きな変更を加えることなく、JavaScript アプリケーションを最適化してより高速かつ効率的にするのに役立ちます。

したがって、そこに何かがあるかどうかを確認(rèn)していることに気づいたときは、常に自問(wèn)する必要があります。「それは配列の仕事なのか、それともセットの力を利用できるのか?」これを正しく行うことで、アプリケーションに必要な違いが得られる可能性があります。

以上がSet.has() が Array.includes() よりも項(xiàng)目の検索が速い理由の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

node.jsでHTTPリクエストを作成する方法は? node.jsでHTTPリクエストを作成する方法は? Jul 13, 2025 am 02:18 AM

node.jsでHTTPリクエストを開始するには、組み込みモジュール、axios、およびnode-fetchを使用する3つの一般的な方法があります。 1.依存関係のない內(nèi)蔵http/httpsモジュールを使用します。これは基本的なシナリオに適していますが、https.get()を使用してデータを取得したり、.write()を介してPOSTリクエストを送信するなど、データステッチとエラーモニタリングの手動(dòng)処理が必要です。 2.Axiosは、約束に基づいたサードパーティライブラリです。簡(jiǎn)潔な構(gòu)文と強(qiáng)力な機(jī)能を備えており、非同期/待ち聲、自動(dòng)JSON変換、インターセプターなどをサポートします。非同期リクエスト操作を簡(jiǎn)素化することをお?jiǎng)幛幛筏蓼埂?3.Node-Fetchは、約束と単純な構(gòu)文に基づいて、ブラウザフェッチに似たスタイルを提供します

JavaScriptデータ型:プリミティブ対參照 JavaScriptデータ型:プリミティブ対參照 Jul 13, 2025 am 02:43 AM

JavaScriptデータ型は、プリミティブタイプと參照タイプに分割されます。プリミティブタイプには、文字列、數(shù)字、ブール、ヌル、未定義、シンボルが含まれます。値は不変であり、コピーは値を割り當(dāng)てるときにコピーされるため、互いに影響を與えません。オブジェクト、配列、関數(shù)などの參照タイプはメモリアドレスを保存し、同じオブジェクトを指す変數(shù)は互いに影響します。 TypeofとInstanceOFを使用してタイプを決定できますが、TypeOfNullの歴史的な問(wèn)題に注意してください。これらの2種類の違いを理解することは、より安定した信頼性の高いコードを書くのに役立ちます。

JavaScript Timeオブジェクト、誰(shuí)かがEACTEXE、Google Chromeなどのより高速なWebサイトを構(gòu)築します。 JavaScript Timeオブジェクト、誰(shuí)かがEACTEXE、Google Chromeなどのより高速なWebサイトを構(gòu)築します。 Jul 08, 2025 pm 02:27 PM

こんにちは、JavaScript開発者!今週のJavaScriptニュースへようこそ!今週は、DenoとのOracleの商標(biāo)紛爭(zhēng)、新しいJavaScript Timeオブジェクトがブラウザ、Google Chromeアップデート、およびいくつかの強(qiáng)力な開発ツールによってサポートされています。始めましょう! 「JavaScript」の商標(biāo)を登録しようとするDeno Oracleの試みとのOracleの商標(biāo)紛爭(zhēng)は、論爭(zhēng)を引き起こしました。 Node.jsとDenoの作成者であるRyan Dahlは、商標(biāo)をキャンセルするために請(qǐng)願(yuàn)書を提出しました。

ハンドリングの約束:javascriptのチェーン、エラー処理、および約束の組み合わせ ハンドリングの約束:javascriptのチェーン、エラー処理、および約束の組み合わせ Jul 08, 2025 am 02:40 AM

約束は、JavaScriptで非同期操作を処理するためのコアメカニズムです。チェーンコール、エラー処理、コンビナーの理解は、アプリケーションをマスターするための鍵です。 1.チェーンコールは、.then()を通じて新しい約束を返し、非同期プロセスの連結(jié)を?qū)g現(xiàn)します。それぞれ.then()は以前の結(jié)果を受け取り、値または約束を返すことができます。 2。エラー処理は、.catch()を使用して例外をキャッチしてサイレント障害を回避し、キャッチのデフォルト値を返すためにプロセスを継続する必要があります。 3。promise.all()などの組み合わせ(すべての成功後にのみ成功しました)、promise.race()(最初の完了が返されます)、promise.allsettled()(すべての完了を待っています)

キャッシュAPIとは何ですか?また、サービスワーカーでどのように使用されますか? キャッシュAPIとは何ですか?また、サービスワーカーでどのように使用されますか? Jul 08, 2025 am 02:43 AM

Cacheapiは、ブラウザからネットワークリクエストをキャッシュするツールです。これは、ウェブサイトのパフォーマンスとオフラインエクスペリエンスを改善するために、サービスワーカーと併用することがよくあります。 1.開発者は、スクリプト、スタイルシート、寫真などのリソースを手動(dòng)で保存できるようにします。 2。要求に応じてキャッシュ応答と一致させることができます。 3.特定のキャッシュの削除またはキャッシュ全體のクリアをサポートします。 4.フェッチイベントを聞いているサービスワーカーを介して、キャッシュの優(yōu)先順位またはネットワークの優(yōu)先戦略を?qū)g裝できます。 5.オフラインサポート、繰り返しのアクセス速度の高速化、主要なリソースのプリロード、バックグラウンドアップデートコンテンツによく使用されます。 6.それを使用する場(chǎng)合、キャッシュバージョンの制御、ストレージ制限、およびHTTPキャッシングメカニズムとの違いに注意する必要があります。

JSラウンドアップ:JavaScriptイベントループに深く潛り込む JSラウンドアップ:JavaScriptイベントループに深く潛り込む Jul 08, 2025 am 02:24 AM

JavaScriptのイベントループは、コールスタック、WebAPIS、およびタスクキューを調(diào)整することにより、非同期操作を管理します。 1.コールスタックは同期コードを?qū)g行し、非同期タスクに遭遇すると、処理のためにWebAPIに引き渡されます。 2。WebAPIがバックグラウンドでタスクを完了した後、コールバックを?qū)潖辘工毳濠`(マクロタスクまたはマイクロタスク)に入れます。 3.イベントループは、コールスタックが空であるかどうかをチェックします。空の場(chǎng)合、コールバックはキューから取り出され、実行のためにコールスタックに押し込まれます。 4.マイクロタスク(Promise.thenなど)は、マクロタスク(SettimeOutなど)より優(yōu)先されます。 5.イベントループを理解するには、メインスレッドのブロックを避け、コード実行順序を最適化するのに役立ちます。

JavaScript DOMイベントでのイベントの泡立ちとキャプチャの理解 JavaScript DOMイベントでのイベントの泡立ちとキャプチャの理解 Jul 08, 2025 am 02:36 AM

イベントの泡は、ターゲット要素から祖先ノードに外側(cè)に伝播し、イベントキャプチャは外側(cè)の層からターゲット要素に內(nèi)側(cè)に伝播します。 1。イベントバブル:子要素をクリックした後、イベントは親要素のリスナーを上向きにトリガーします。たとえば、ボタンをクリックした後、最初に保育を出してから、親クリックしました。 2。イベントキャプチャ:3番目のパラメーターをtrueに設(shè)定して、リスナーが[親子要素のキャプチャリスナー]をクリックする前に[親要素のキャプチャリスナーをトリガーするなど、キャプチャステージで実行されるようにします。 3.実用的な用途には、子どもの要素イベントの統(tǒng)一された管理、傍受前処理、パフォーマンスの最適化が含まれます。 4. DOMイベントストリームは、キャプチャ、ターゲット、バブルの3つの段階に分割され、デフォルトのリスナーはバブルステージで実行されます。

マップとフィルターを超えて高次関數(shù)のJSラウンドアップ マップとフィルターを超えて高次関數(shù)のJSラウンドアップ Jul 10, 2025 am 11:41 AM

JavaScriptアレイには、Map and Filterに加えて、他の強(qiáng)力で使用されていない方法があります。 1.還元は、合計(jì)するだけでなく、カウント、グループ、フラットンアレイ、新しい構(gòu)造を構(gòu)築することもできます。 2。FindおよびFindIndexは、個(gè)々の要素またはインデックスを見つけるために使用されます。 3.一部とすべてが條件が存在するか、すべての出會(huì)いかを判斷するために使用されます。 4.ソートはソートできますが、元の配列を変更します。 5.副作用を避けるために、それを使用するときにアレイをコピーすることに注意してください。これらの方法により、コードがより簡(jiǎn)潔で効率的になります。

See all articles