javascript - recorrer - ¿Cómo iterar sobre un mapa débil?
weak map js (2)
Sin embargo, ¿es posible recorrer las entradas de alguna manera?
No, como dices, los contenidos de un WeakMap
no son accesibles por diseño, y no hay iterabilidad.
Si no ... ¿cómo lo hace la consola de Chrome?
La consola utiliza la API de depuración del motor JS, que permite el acceso a las partes internas de los objetos (también para prometer estados, primitivas envueltas, etc.) y muchas más.
Un JavaScript WeakMap ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap ) no le permite obtener la clave, o la longitud o el tamaño, por diseño.
Sin embargo, ¿es posible recorrer las entradas de alguna manera?
Si no ... ¿cómo lo hace la consola de Chrome?
Puede usar este pequeño fragmento de Universal forEach . Sin embargo, utiliza lodash y se puede mejorar en gran medida.
import lodashForEach from ''lodash/forEach'';
import entries from ''lodash/entries'';
/**
* @since [email protected]
* @param {Array|Map|Object|Set|WeakMap|WeakSet} iterable
* @param {Function} iteratee
* @example
* const iterable = new Map();
* iterable.set(''somekey1'', 1);
* iterable.set(''somekey2'', 2);
* // or
* const iterable = new Set();
* iterable.add("entry1");
* iterable.add("entry2");
* // run function
* forEach(iterable, (value, key) => {
* console.group(''-'');
* console.info(''KEY'');
* console.log(key);
* console.info(''VALUE'');
* console.log(value);
* console.groupEnd();
* });
*/
function forEach(iterable, iteratee) {
lodashForEach((iterable instanceof Set || iterable instanceof WeakSet) ? Array.from(iterable) : entries(iterable), (entry, index, collection) => {
iteratee(entry[1], entry[0], collection, index);
});
return iterable;
}
export default forEach;