mdnの「Set」ドキュメント によれば、entries
は便利なメソッドとして提供されています
... APIをMapオブジェクトと同様に保つために、各エントリのキーと値は同じ値になっているため、配列[値、値]が返されます。
私の質問は、この場合にAPIを同様に保つ目的は何ですか?つまり、セットに対してメソッドentries
を使用するのはいつですか?
Set
とMap
のAPIは、格納されている値が少し異なります。 Set
sには値のみが含まれますが、Map
sには関連するキーも含まれます。
このため、両方の構造にfilter
、map
、forEach
、... Array
と同様の関数がある場合、アクション設定は約具体的には、各反復値は少し異なる可能性があります。
Map: function(key, value) { }
Set: function(value) { }
Map
にすでにキーを保持している場合は、反復中にkey
の値も検査できるのは当然です。
ここで、2つのコレクションのいずれかを反復処理したいが、値のみを考慮したい状況が発生した場合、各データコレクションに1つずつ、合計2つの関数が必要になります。
map.forEach((key, value) => console.log(value));
set.forEach(value => console.log(value));
値のみを考慮し、両方のアクションのロジックは明らかに同じであっても、両方のコレクションを提供する関数を作成することはできません。 entries
とSet
の両方のMap
メソッドは、共通のインターフェイスを提供することでこの問題を修正します。
次の関数(またはその代替手段)を作成することにより、私はあからさまにJS開発者ではないので、不正確な点はご容赦ください。
function forEach(entriesIterator, action) {
let current = entriesIterator.next();
while (current.done === false) {
action(current.value[1]);
current = entriesIterator.next();
}
}
entries
/Map
および/またはSet
のいずれかをフィードしても、引き続き機能します。
forEach(map.entries(), value => console.log(value));
forEach(set.entries(), value => console.log(value));
TLDR:entries
メソッドは、潜在的に値のみを気にする可能性があるデータコレクションを反復する抽象化を提供します。