サーチ…


前書き

Setオブジェクトを使用すると、プリミティブ値でもオブジェクト参照でも、すべての型の一意の値を格納できます。

Setオブジェクトは値の集合です。セットの要素を挿入順に反復することができます。セット内の値は、 一度だけ発生する可能性があり、それはセットのコレクションでユニークです。 SameValueZero比較アルゴリズムを使用して、 明確な値が区別されます。

セットについての標準仕様

構文

  • 新しいSet([iterable])
  • mySet.add(value)
  • mySet.clear()
  • mySet.delete(value)
  • mySet.entries()
  • mySet.forEach(コールバック[、thisArg])
  • mySet.has(値)
  • mySet.values()

パラメーター

パラメータ詳細
繰り返し可能な反復可能オブジェクトが渡された場合、そのすべての要素が新しいSetに追加されます。 nullは未定義として扱われます。
Setオブジェクトに追加する要素の値。
折り返し電話各要素に対して実行する関数。
thisArg オプション。コールバックを実行するときにこれとして使用する値。

備考

セット内の各値は一意でなければならないため、値の等価性はチェックされ、===演算子で使用されているものと同じアルゴリズムに基づいていません。具体的には、Setsの場合、+0(厳密には-0に等しい)と-0は異なる値です。しかし、これは最新のECMAScript 6仕様で変更されています。 Gecko 29.0(Firefox 29 / Thunderbird 29 / SeaMonkey 2.26)(bug 952870)から始まり、最近の夜間のChromeでは+0と-0がSetオブジェクトの同じ値として扱われます。また、NaNとundefinedもSetに格納できます。 NaNはNaNと同じと見なされます(NaN!== NaNの場合でも)。

セットの作成

Setオブジェクトを使用すると、プリミティブ値でもオブジェクト参照でも、すべての型の一意の値を格納できます。

アイテムをセットにプッシュしてプレーンJavaScript配列と同様に反復することはできますが、配列とは異なり、値がすでに存在する場合は値をセットに追加できません。

新しいセットを作成するには:

const mySet = new Set();

または、反復可能オブジェクトからセットを作成して、開始値を与えることができます。

const arr = [1,2,3,4,4,5];
const mySet = new Set(arr);

上の例では、設定されたコンテンツは{1, 2, 3, 4, 5}ます。値4は、作成に使用された元の配列とは異なり、1回だけ表示されることに注意してください。

セットへの値の追加

Setに値を追加するには、 .add()メソッドを使用します。

mySet.add(5);

値が既にセットに存在する場合、セットには一意の値が含まれているため、値は再び追加されません。

.add()メソッドはセット自体を返しますので、追加呼び出しを連鎖させることができます:

mySet.add(1).add(2).add(3);

セットからの値の削除

セットから値を削除するには、 .delete()メソッドを使用します。

mySet.delete(some_val);

この関数は戻りますtrue値がセットで存在し、かつ削除された場合、またはfalseそう。

セットに値が存在するかどうかを確認する

指定された値がセット内に存在するかどうかを調べるには、 .has()メソッドを使用します。

mySet.has(someVal);

someValがセットに含まれる場合はtrue返し、そうでない場合はfalse返しtrue

セットをクリアする

.clear()メソッドを使用すると、セット内のすべての要素を削除できます。

mySet.clear();

設定された長さの取得

.sizeプロパティを使用すると、セット内の要素数を取得できます

const mySet = new Set([1, 2, 2, 3]);
mySet.add(4);
mySet.size; // 4

このプロパティは、 Array.prototype.lengthとは異なり、読み取り専用です。つまり、何かを割り当てることによって変更することはできません。

mySet.size = 5;
mySet.size; // 4

strictモードでは、それはエラーをスローします:

TypeError: Cannot set property size of #<Set> which has only a getter

セットを配列に変換する

時には、例えば使用できるようにするには、配列に設定を変換する必要がありArray.prototypeなどの方法.filter()これを行うには、 Array.from()またはdestructuring-assignment使用します。

var mySet = new Set([1, 2, 3, 4]);
//use Array.from
const myArray = Array.from(mySet);
//use destructuring-assignment
const myArray = [...mySet];

これで、偶数だけを含むように配列をフィルタリングし、Setコンストラクタを使用してSetに戻すことができます。

mySet = new Set(myArray.filter(x => x % 2 === 0));

mySet偶数だけが含まれるようになりました:

console.log(mySet); // Set {2, 4}

交点とセットの違い

Setの交差や差異のための組み込みメソッドはありませんが、それでも実現できますが、配列に変換し、フィルタリングし、Setsに変換し直します。

var set1 = new Set([1, 2, 3, 4]),
    set2 = new Set([3, 4, 5, 6]);

const intersection = new Set(Array.from(set1).filter(x => set2.has(x)));//Set {3, 4}
const difference = new Set(Array.from(set1).filter(x => !set2.has(x))); //Set {1, 2}

反復セット

単純for-ofループを使ってSetを反復することができます:

const mySet = new Set([1, 2, 3]);

for (const value of mySet) {
  console.log(value); // logs 1, 2 and 3
}

セットを反復処理するとき、最初にセットに追加された順序で常に値を返します。例えば:

const set = new Set([4, 5, 6])
set.add(10)
set.add(5) //5 already exists in the set
Array.from(set) //[4, 5, 6, 10]

あります.forEach()と同様の方法、 Array.prototype.forEach() 2つのパラメータ、各要素に対して実行されるcallback 、およびcallback実行時にthisとして使用されるオプションのthisArgがありcallback

callbackは3つの引数があります。最初の2つの引数は、Setの現在の要素( Array.prototype.forEach()Map.prototype.forEach() )との一貫性のためにあり、3番目の引数はSet自身です。

mySet.forEach((value, value2, set) => console.log(value)); // logs 1, 2 and 3


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow