ES6のSetデータ構造とは何ですか?

一个新手
リリース: 2017-09-09 13:57:55
オリジナル
1725 人が閲覧しました

ES6: Set

Set を理解する

ES6 はデータ構造 Set を提供します。配列に似ていますが、重複する値はありません。

  • Set 自体はコンストラクターであり、Set データ構造を生成するために使用されます

const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));for(let i of s ) {    console.log(i); //2 3 4 5 }
ログイン後にコピー
  • Set は初期化するパラメータとして配列 (または配列のようなオブジェクト) を受け入れることができます

var set = new Set([1, 2, 3, 4, 4]);
[...set]; // [1, 2, 3, 4]
ログイン後にコピー

は次の目的で使用できます配列 重複を削除します[...new Set(array)]

Array.from()[...new Set(array)]

Array.from()
このメソッドは Set 構造を次のように変換できます。配列
    Array.from(new Set(array))

Set に値を追加する場合、型変換は発生しません (完全に等しい === と同様) が、Set 内では NaN がそれ自体と等しいことに注意してください。他の 2 つのオブジェクトは常に等しくありません。

  • let set = new Set();let a = NaN;let b = NaN;
    set.add(a);
    set.add(b);
    set; //{NaN} 只能加入一个,说明Set内部两个NaN是相等的
    ログイン後にコピー

    インスタンスのプロパティとメソッドを設定します

    • プロパティ:

      Set.prototype.constructor:构造函数,默认就是Set函数

    • Set.prototype.size:返回实例的成员总数

  • 操作方法(方法的具体实现见:我对JS集合的简单学习):

    • add(value):添加一个值,返回Set结构本身

    • delete(value):删除某个值,返回布尔值

    • has(value):返回布尔值,表示是否是成员

    • clear()

      🎜🎜🎜Set.prototype.constructor🎜: コンストラクター、デフォルトは Set 関数です 🎜🎜🎜🎜🎜 🎜:戻るインスタンスのメンバーの総数🎜🎜🎜🎜🎜Operation メソッド (メソッドの具体的な実装については、JS コレクションの私の簡単な研究を参照):🎜🎜🎜🎜🎜🎜add(value)🎜: 値を追加し、 Set 構造自体を返します🎜🎜🎜 🎜🎜delete(value)🎜: 値を削除し、ブール値を返します🎜🎜🎜🎜🎜has(value)🎜: メンバーであるかどうかを示すブール値を返します🎜🎜🎜🎜 🎜clear()🎜: すべてのメンバーをクリア、なし 戻り値 🎜
s.add(1).add(2).add(2); //链式写法s.size(); //2s.has(3); //falses.delete(2);
s.has(2); //false
ログイン後にコピー
  • 遍历方法

    • keys():返回键名的遍历器(什么是遍历器?Iterator)

    • values():返回键值的遍历器

    • entries():返回键值对的遍历器

    • forEach():使用回调函数遍历每个成员

这里要注意Set的键名和键值是同一个值,所以key()和values()行为是一致的。

let set = new Set(['red', 'green', 'no']);for(let item of set.keys()) {    console.log(item); //red green no}for(let item of set.values()) {    console.log(item); //red green no}for(let item of set.entries()) {    console.log(item); //['red': 'red'] ['green': 'green'] ['no': 'no']}//对每个成员执行某种操作,参数依次为键值、键名、集合本身new Set([1, 2, 3]).forEach((value, key) => console.log(value * 2)); //2 4 6
ログイン後にコピー

操作集合

let a = new Set([1, 2, 3]);let b = new Set([4, 3, 2]);//并集let union = new Set([...a, ...b]); //{1, 2, 3, 4}//交集let intersect = new Set([...a].filter(x => b.has(x))); //{2, 3}//差集let difference = new Set([...a].filter(x => !b.has(x))); //{1}
ログイン後にコピー

号外:扩展运算符(...)内部使用for...of循环,所以应该知道for of是干嘛的吧

数组的map()filter()可用于Set

let set = new Set([1, 2, 3]);set = new Set([...set].map(x => x * 2)); //set: {2, 4, 6}let set = new Set([1, 2, 3, 4, 5]);set = new Set([...set].filter(x => (x % 2) == 0)); //set {2, 4}
ログイン後にコピー

以上がES6のSetデータ構造とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート