JavaScriptの設定とは何ですか?いつ使用しますか?使い方?
JavaScript では Set を使用する必要がある場合があります。次の記事では、Set を理解し、Set とは何か、Set をいつ使用するか、および Set のデータ操作 (交差、差集合、交差、対称差集合) を紹介します。
多くの場合、複数のリストを比較して、共通部分や差異があるかどうかなどを取得する必要があります。JavaScript にはこれをうまく実現できるデータ型があります。需要、つまり Set
です。
Set
オブジェクトは配列に似ていますが、一意の項目のみが含まれています。 Set
オブジェクトは値のコレクションであり、その要素は挿入順に反復できます。 Set
の要素は 1 回だけ表示されます。つまり、Set
の要素は一意です。
記事に含まれるコード アドレス: https://codepen.io/quintiontang/pen/rNmNbbY
Set## とは
#Set オブジェクトは値のコレクションです。その要素は挿入順に反復できます。要素は 1 回だけ表示されます。つまり、
Set は特定の順序ではなく、一意の値の保存されたコレクションです。スタック、キュー、配列などの他のコレクション タイプとは異なり、セットはリストの比較やセット内の項目の存在の検出に使用できます。
Set は、スタックやキューのデータ構造と同様に、その動作によって定義される抽象データ型です。
key-key の特性により、これは
Map に似ています。
Javascript Set
JavaScript の Set は非常に基本的でシンプルですが、他のものほど機能はありません。言語 一般的な集合演算関数。独自のアルゴリズム (厳密な等価性
=== に基づくものではない) を使用して、要素が同一であるかどうかを検出します。
unknown、
null、および
NaN をコレクションに格納すると、たとえ
NaN であっても、1 回だけ格納されることを意味します。 != = NaN。通常、オブジェクト タイプのストレージに適用されます。
const setTest = new Set([0, -0, Infinity,null, undefined, null, NaN, NaN, Infinity,null]); console.log(setTest); // Set { 0, Infinity, null, undefined, NaN }
- NaN
と
NaNは等しくありませんが、
Setセットには
- unknown
が 1 つだけ存在し、
Infinityには
# が 1 つだけ存在します。 Setset
##基本的な Set の使用方法はこの記事では紹介しません。 mozilla
特定のリストを比較し、等しいかどうかを判断する必要がある場合は、Set を使用できます。
、適用可能な状況、主にデータ内の集合演算について説明します。 2 つの集合の和集合を取得します
2 つの集合を取得します差分セット
difference2 つのセットの共通部分を取得
intersection2 つのセットの対称差分セットを取得
intersectionDifference2 つのセットがサブセットであるかどうかを判断する
isSubset2 つのセットがスーパーセットであるかどうかを判断する
isSuperset次のようになりますこれら 3 つのケースに基づいて、
Set
演算
数学では、集合について話すときは常に、実行できる演算がいくつかあります。実際には、 Set
は、数学的有限集合のコンピューター実装です。 コード内の
Set
Set を拡張してそのプロパティとメソッドを継承し、それに他のメソッドを追加します。 。
サンプル コードでは、空ではない有効なコレクションであるかどうかを確認するための簡単なメソッドのみが使用されています。
unionUnionclass SetHelper extends Set { /** * 验证集合是否为有效集合 * @param {*} set * @returns */ _isValid = (set) => { return set && set instanceof Set && set.size > 0; }; }ログイン後にコピー
##union この操作では、複数の
オブジェクトと結合した結果を返します。実装は、現在のセットと指定されたセットを配列にマージして作成し、新しいセットを返します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">union(set) {
if (!this._isValid(set)) return new SetHelper();
return new SetHelper([...this, ...set]);
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
差異セット
差異
差異 この操作は、1 つのセット要素にのみ含まれる新しいセットを返します。別のセット内にあるものとそうでないもの、つまり差分セットの数学的概念です。
difference(set) { if (!this._isValid(set)) return new SetHelper(); const differenceSet = new SetHelper(); this.forEach((item) => { !set.has(item) && differenceSet.add(item); }); return differenceSet; }
Intersection
intersection
intersection この操作は、両方のコレクションに共通の要素のみを含む新しいコレクションを返します。実装は、小さいコレクションを反復処理して (不必要なチェックを回避し)、各項目が大きいコレクションに存在するかどうかを確認して交差に追加します。交差は、走査の完了後に返されます。
intersection(set) { const intersectionSet = new SetHelper(); if (!this._isValid(set)) return intersectionSet; const [smallerSet, biggerSet] = set.size <= this.size ? [set, this] : [this, set]; smallerSet.forEach((item) => { biggerSet.has(item) && intersectionSet.add(item); }); return intersectionSet; }
対称差分セット
intersectionDifference
##intersectionDifference
この操作は、交差のないすべての要素を含むセットを返します。 2 つのセットの新しいコレクションです。
intersectionDifference(set) { if (!this._isValid(set)) return new SetHelper(); return new SetHelper([ ...this.difference(set), ...set.difference(this), ]); }
サブセット サブセット
isSubset
操作将判断两个集合是否为子集关系(当一个集合的所有项都包含在另一个集合中时)。实现上首先检查两个集合的大小,如果一个集合更大,则它不能是另一个集合的子集,然后对于每个项目,它检查它是否存在于另一个中。
isSubset(set) { if (!this._isValidSet(set)) return false; return ( this.size <= set.size && [...this].every((item) => set.has(item)) ); }
超集 superset
isSuperset
操作将判断两个集合是否为超集关系。超集是子集的反操作。当一个集合包含另一个较小或相等大小的集合的所有项目时,它就是一个超集。
isSuperset(set) { if (!this._isValidSet(set)) return false; return ( this.size >= set.size && [...set].every((item) => this.has(item)) ); }
静态 Set
静态Set
是一个始终包含它初始化元素的集合,不能添加、删除、清除元素。Javascript Set
不是静态的,它总能在创建后可以公开修改该集合的方法,如 add
、delete
,为避免集合被修改,可以创建一个新的 Set
,将其修改方法重置 。
class StaticSet extends SetHelper { constructor(items) { super(items); this.add = undefined; this.delete = undefined; this.clear = undefined; } }
使用
现在就可以使用上面定义的方法操作两个 Set
,如下:
const setA = new StaticSet(new Set([1, 2, 3, 4])); const setB = new StaticSet(new Set([3, 4, 5, 6])); console.log([...setA.union(setB)]); // [ 1, 2, 3, 4, 5, 6 ] console.log([...setA.difference(setB)]); // [ 1, 2 ] console.log([...setA.intersection(setB)]); // [ 3, 4 ] console.log([...setB.intersectionDifference(setA)]); // [ 5, 6, 1, 2 ]
总结
Set
不限于上面这些操作,之前有介绍过可以用来合并数组去重,由于 Set
和 Array
相互转换很简单,因此可以用到 Array
的场合可以优先考虑一下 Set
,因为在内存使用上, Set
比 Array
占用更少。
更多编程相关知识,请访问:编程视频!!
以上がJavaScriptの設定とは何ですか?いつ使用しますか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。
