質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

iteratorパターン

iteratorパターンとは、オブジェクト指向プログラミングのデザインパターンです。コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とします。

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2039閲覧

[ES6] Set#keys, Set#entries は何の為に存在するのか?

think49

総合スコア18156

ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

iteratorパターン

iteratorパターンとは、オブジェクト指向プログラミングのデザインパターンです。コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とします。

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

2グッド

0クリップ

投稿2016/07/25 01:47

編集2016/07/25 01:51

Set.prototype.keys と Set.prototype.values

ECMA-262 6th Edition によると「Set.prototype.keys の初期値は Set.prototype.values の初期値と同じ関数オブジェクト」とあります。

JavaScript

1'use strict'; 2var s = new Set(['a', 'b', 'c', 'a']), 3 valuesArray = [], 4 keysArray = []; 5 6for (var value of s.values()) { 7 valuesArray.push(value); 8} 9 10for (var key of s.keys()) { 11 keysArray.push(key); 12} 13 14console.log(JSON.stringify(valuesArray)); // ["a","b","c"] 15console.log(JSON.stringify(keysArray)); // ["a","b","c"] 16 17var values = s.values(); 18console.log(values.next().value); // "a" 19console.log(values.next().value); // "b" 20console.log(values.next().value); // "c" 21console.log(values.next().value); // undefined 22 23var keys = s.keys(); 24console.log(keys.next().value); // "a" 25console.log(keys.next().value); // "b" 26console.log(keys.next().value); // "c" 27console.log(keys.next().value); // undefined 28 29console.log(s.keys === s.values); // true 30console.log(Set.prototype.keys === Set.prototype.values); // true 31console.log(s.keys.toString()); // function values() { [native code] }

この通り、どちらも value のイテレータ(SetIterator)を返します。

Set.prototype.entries

一方、Set.prototype.entries では key+value のイテレータ(SetIterator)を返します。
ここで key, value は同値として扱われます。

JavaScript

1'use strict'; 2var s = new Set(['a', 'b', 'c', 'a']), 3 entriesArray = []; 4 5for (var entry of s.entries()) { 6 entriesArray.push(entry); 7} 8 9console.log(JSON.stringify(entriesArray)); // [["a","a"],["b","b"],["c","c"]]

Set.prototype.keys, Set.prototype.entries の存在意義は?

実際にコーディングする場合、Set.prototype.values があれば必要十分に思えます。
Set.prototype.keys, Set.prototype.entries はどのような用途/設計において有効なAPIなのでしょうか。

mpyw, ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらく、Mapとインターフェースを合わせるためだと思われます。

Setだとわかっている場面では、特に出番はなさそうです。

投稿2016/07/25 02:52

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2016/07/25 03:30 編集

回答ありがとうございます。 確かに Map インターフェース用に作られたコードの一部を流用出来そうですね。 もう少し、他の意見を待ってからベストアンサーを選びたいと思います。
think49

2016/08/01 15:26

他の意見はなさそうなのでベストアンサーとしたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問