Perché dovrei usare es6 Set prototype - 'entries'

5

In base alla documentazione "Set" di mdn , entries è fornito come metodo di convenienza

...to keep the API similar to the Map object, each entry has the same value for its key and value here, so that an array [value, value] is returned.

La mia domanda è: qual è lo scopo di mantenere l'API simile in questo caso? cioè quando avrei mai usato il metodo entries per un Set?

    
posta aaaaaa 18.12.2016 - 08:06
fonte

1 risposta

1

Set e Map hanno API leggermente diverse in termini di valori memorizzati. Mentre Set s contiene solo valori, Map s contiene anche le chiavi associate.

Per questo motivo, se entrambe le strutture hanno filter , map , forEach , ... funziona esattamente come fa Array , la presunzione di impostazione azione su ogni valore iterato è probabile che sia leggermente diversa , in particolare:

Map: function(key, value) { }
Set: function(value) { }

Perché quando si conservano già le chiavi in Map è logico poter ispezionare anche il valore di key durante l'iterazione.

Ora, se hai riscontrato una situazione in cui desideri eseguire un'iterazione su una delle due raccolte ma ti interessa solo il valore, ti occorrono due funzioni, una per ogni raccolta di dati.

map.forEach((key, value) => console.log(value));
set.forEach(value => console.log(value));

Anche se ti interessa solo il valore e la logica di entrambe le azioni è chiaramente la stessa, non puoi scrivere una funzione per servire entrambe le raccolte. Il metodo entries di entrambi Set e Map risolve questo problema fornendo un'interfaccia comune.

Creando la seguente funzione (o la sua alternativa, non sono manly uno sviluppatore JS quindi scusami eventuali imprecisioni):

function forEach(entriesIterator, action) {
    let current = entriesIterator.next();
    while (current.done === false) {
        action(current.value[1]);

        current = entriesIterator.next();
    }
}

puoi alimentare entries di Map e / o Set e funzionerà comunque.

forEach(map.entries(), value => console.log(value));
forEach(set.entries(), value => console.log(value));

TLDR: il metodo entries fornisce un'astrazione per iterare su una raccolta di dati in cui potresti preoccuparti solo dei valori.

    
risposta data 18.12.2016 - 13:38
fonte

Leggi altre domande sui tag