El método forEach() usa la variable de value dos veces. Está escrito que esto se hace para garantizar la compatibilidad de Map y Set.
Eso es por compatibilidad con Map donde la devolución de llamada pasada forEach tiene tres argumentos. Se ve un poco extraño, seguro. Pero puede ayudar reemplazar Map con Set en ciertos casos con facilidad, y viceversa.
let set = new Set(["orange", "apple", "banana"]); set.forEach((value, valueAgain, set) => { console.log(valueAgain); //"orange", "apple", "banana" });Entonces, mi pregunta es cómo Set puede convertirse en Set y viceversa. Según tengo entendido, no existe un método especial para este caso.
No dice nada acerca de la conversión. Dice que puede usar la misma devolución de llamada de función para Map y Set .
const set = new Set(["oranges", "apples", "bananas"]); const map = new Map([ ['cucumber', 500], ['tomatoes', 350], ['onion', 50] ]); const print = (value, key) => console.log(value, key); set.forEach(print) // oranges oranges // apples apples // bananas bananas map.forEach(print) // 500 cucumber // 350 tomatoes // 50 onionEl punto no es que pueda reemplazar fácilmente un conjunto con un mapa en su código. Si hace eso, toca el código de todos modos y no tendrá problemas para reescribir la iteración.
El beneficio real es que permite escribir código que puede manejar ambos a la vez. En tu ejemplo:
function print(collection) { collection.forEach((value, key) => { console.log(key, value); }); } const set = new Set(["orange", "apple", "banana"]); const map = new Map([[1, "peach"], [2, "pear"]]); print(set); // works print(map); // works the same