目次
Set## とは
特定のリストを比較し、等しいかどうかを判断する必要がある場合は、Set を使用できます。
演算数学では、集合について話すときは常に、実行できる演算がいくつかあります。実際には、 Set
静态 Set
使用
总结
ホームページ ウェブフロントエンド jsチュートリアル JavaScriptの設定とは何ですか?いつ使用しますか?使い方?

JavaScriptの設定とは何ですか?いつ使用しますか?使い方?

Jul 16, 2021 pm 07:19 PM
javascript set

JavaScript では Set を使用する必要がある場合があります。次の記事では、Set を理解し、Set とは何か、Set をいつ使用するか、および Set のデータ操作 (交差、差集合、交差、対称差集合) を紹介します。

JavaScriptの設定とは何ですか?いつ使用しますか?使い方?

多くの場合、複数のリストを比較して、共通部分や差異があるかどうかなどを取得する必要があります。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 は非常に基本的でシンプルですが、他のものほど機能はありません。言語 一般的な集合演算関数。独自のアルゴリズム (厳密な等価性 === に基づくものではない) を使用して、要素が同一であるかどうかを検出します。

これは、

unknownnull、および 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 }
ログイン後にコピー

上記の実行結果から次の結論が導き出されます:

  • NaNNaN は等しくありませんが、 Set セットには
  • unknown が 1 つだけ存在し、Infinity には # が 1 つだけ存在します。 Set set ##基本的な Set の使用方法はこの記事では紹介しません。
  • mozilla
Web サイトを参照してください。

Set を使用する場合

特定のリストを比較し、等しいかどうかを判断する必要がある場合は、Set を使用できます。

、適用可能な状況、主にデータ内の集合演算について説明します。

2 つの集合の和集合を取得します

union
  • 2 つの集合を取得します差分セットdifference
  • 2 つのセットの共通部分を取得intersection
  • 2 つのセットの対称差分セットを取得intersectionDifference
  • 2 つのセットがサブセットであるかどうかを判断するisSubset
  • 2 つのセットがスーパーセットであるかどうかを判断するisSuperset
  • 次のようになりますこれら 3 つのケースに基づいて、
  • Set
に関連する操作を紹介します。

集合

演算数学では、集合について話すときは常に、実行できる演算がいくつかあります。実際には、 Set

は、数学的有限集合のコンピューター実装です。

コード内の Set

操作をより適切に示すために、サンプル コードは Javascript

Set を拡張してそのプロパティとメソッドを継承し、それに他のメソッドを追加します。 。 サンプル コードでは、空ではない有効なコレクションであるかどうかを確認するための簡単なメソッドのみが使用されています。

class SetHelper extends Set {
    /**
     * 验证集合是否为有效集合
     * @param {*} set
     * @returns
     */
    _isValid = (set) => {
        return set && set instanceof Set && set.size > 0;
    };
}
ログイン後にコピー

Union
union

##union この操作では、複数の

Set

オブジェクトと結合した結果を返します。実装は、現在のセットと指定されたセットを配列にマージして作成し、新しいセットを返します。 <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 不是静态的,它总能在创建后可以公开修改该集合的方法,如 adddelete ,为避免集合被修改,可以创建一个新的 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 不限于上面这些操作,之前有介绍过可以用来合并数组去重,由于 SetArray 相互转换很简单,因此可以用到 Array 的场合可以优先考虑一下 Set ,因为在内存使用上, SetArray 占用更少。

更多编程相关知识,请访问:编程视频!!

以上がJavaScriptの設定とは何ですか?いつ使用しますか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

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

MyBatis動的SQLタグのSetタグ機能の詳細説明 MyBatis動的SQLタグのSetタグ機能の詳細説明 Feb 26, 2024 pm 07:48 PM

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

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

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

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

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

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

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

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

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

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

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

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

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

See all articles