セットはES2015(別名ES6、つまりECMAScript 6)で利用できるようになりました。ES6は、2015年6月からJavaScriptの現在の標準となっています。
ECMAScript 6には、任意の値に対して機能し、高速でNaNを正しく処理するデータ構造Setがあります。-アクセルRauschmayer、ES6を探ります
AxelRauschmayerの著書ExploringES6の最初の2つの例:
単一要素の管理:
> let set = new Set();
> set.add('red')
> set.has('red')
true
> set.delete('red')
true
> set.has('red')
false
セットのサイズを決定してクリアする:
> let set = new Set();
> set.add('red')
> set.add('green')
> set.size
2
> set.clear();
> set.size
0
JavaScriptのセットについて詳しく知りたい場合は、ExploringES6をチェックしてください。この本はオンラインで無料で読むことができますが、著者のアクセル・ラウシュマイヤー博士を支援したい場合は、約30ドルで本を購入できます。
セットとES6を使用する場合は、Babel、ES6からES5へのトランスパイラー、およびそのポリフィルを使用できます。
編集:2017年6月6日の時点で、ほとんどの主要なブラウザーは最新バージョンで完全なセットサポートを備えています(IE 11を除く)。これは、古いブラウザをサポートする必要がない場合は、babelが必要ない可能性があることを意味します。現在のブラウザを含むさまざまなブラウザでの互換性を確認したい場合は、KangaxのES6互換性テーブルを確認してください。
編集:
初期化についての説明だけです。セットは、コンストラクターで任意の同期反復可能オブジェクトを取ることができます。つまり、配列だけでなく、文字列やイテレータも使用できます。たとえば、次の配列と文字列のセットの初期化を考えてみましょう。
const set1 = new Set(['a','a','b','b','c','c']);
console.log(...set1);
console.log(set1.size);
const set2 = new Set("aabbcc");
console.log(...set2);
console.log(set2.size);
配列と文字列の両方の出力は同じです。これ...set1
がスプレッド構文であることに注意してください。iterableの各要素が1つずつセットに追加されているように見えます。したがって、配列と文字列の両方が同じ要素を持ち、要素が同じ順序であるため、セットは同じように作成されます。セットについて注意すべきもう1つの点は、セットを反復する場合、反復順序は要素がセットに挿入された順序に従うことです。セットを反復処理する例を次に示します。
const set1 = new Set(['a','a','b','b','c','c']);
for(const element of set1) {
console.log(element);
}
セットを初期化するために任意のイテレータを使用できるため、ジェネレータ関数からイテレータを使用することもできます。同じ出力を生成するイテレータ初期化の2つのそのような例を次に示します。
function* getLetters1 () {
yield 'a';
yield 'a';
yield 'b';
yield 'b';
yield 'c';
yield 'c';
}
function* getLetters2 (letters, repeatTimes) {
for(const letter of letters) {
for(let i = 0; i < repeatTimes; ++i) {
yield letter;
}
}
}
console.log("------ getLetters1 ------");
console.log(...getLetters1());
const set3 = new Set(getLetters1());
console.log(...set3);
console.log(set3.size);
console.log("------ getLetters2 ------");
console.log(...getLetters2('abc', 2));
const set4 = new Set(getLetters2('abc', 2));
console.log(...set4);
console.log(set4.size);
これらの例のジェネレーター関数は、繰り返さないように記述できますが、ジェネレーター関数がより複雑で、以下がパフォーマンスに悪影響を与えない限り、Setメソッドを使用して、ジェネレーターから値を取得しないようにすることができます。繰り返さないでください。
Rauschmayer博士の本の章を読まずにセットについて詳しく知りたい場合は、SetのMDNドキュメントを確認してください。MDNはまた、複数のそのような使用のようなセットを反復処理の例有しforEach
及び使用.keys
、.values
及び.entries
方法を。MDNには、集合和集合、集合交差、集合差、対称集合差、集合スーパーセットチェックなどの例もあります。うまくいけば、それらの操作のほとんどは、それらをサポートする独自の関数を構築する必要なしに、JavaScriptで利用できるようになります。実際、新しいSetメソッドに関するこのTC39提案があり、提案がステージ4に達した場合、将来のある時点で次のメソッドをJavaScriptのSetに追加する必要があります。
- Set.prototype.intersection(iterable)-メソッドは、setintersection操作によって新しいSetインスタンスを作成します。
- Set.prototype.union(iterable)-メソッドは、setunion操作によって新しいSetインスタンスを作成します。
- Set.prototype.difference(iterable)-メソッドは、iterableに要素が存在しない新しいSetを作成します。
- Set.prototype.symmetricDifference(iterable)-thisまたはiterableのいずれかでのみ見つかった要素のセットを返します。
- Set.prototype.isSubsetOf(iterable)
- Set.prototype.isDisjointFrom(iterable)
- Set.prototype.isSupersetOf(iterable)
'Tom' in set
trueの配列がどのように見えると思いますか?あなたが何かについて間違った仮定をしているように見えます、そして私は何について調べようとしています。