El Object.entries()
y Object.values()
se introdujeron métodos en JavaScript Object
constructor con el lanzamiento de ECMAScript 2017 (ES8). Echemos un vistazo rápido a estos métodos útiles.
Object.entries()
Método
El Object.entries()
El método toma un objeto como argumento y devuelve una matriz con matrices de pares clave-valor:
const birds = {
owl: '🦉',
eagle: '🦅',
duck: '🦆'
};
const entries = Object.entries(birds);
console.log(entries);
// [['owl', '🦉'], ['eagle', '🦅'], ['duck', '🦆']]
El orden del elemento de la matriz no depende de cómo se definió el objeto. El orden es el mismo que proporciona un for...in
bucle.
Iterando a través de un Objeto
Podemos usar Object.entries()
para iterar sobre el objeto también:
// using `for...of` loop
for (const [key, value] of Object.entries(birds)) {
console.log(`${key}: ${value}`);
}
// owl: 🦉
// eagle: 🦅
// duck: 🦆
// using array destructuring
Object.entries(birds).forEach(([key, value]) => console.log(`${key}: ${value}`));
// owl: 🦉
// eagle: 🦅
// duck: 🦆
Conversión de un objeto en un mapa
Dado que el constructor de mapas también toma un iterable de entries
para inicializar un objeto de mapa, el Object.entries()
El método se puede utilizar para crear un mapa a partir de un objeto:
const map = new Map(Object.entries(birds));
console.log(map.size); // 3
console.log(map.has('owl')); // true
console.log(map.get('duck')); // 🦆
Object.values()
Método
El Object.values()
El método funciona de forma muy parecida a Object.entries()
, pero solo devuelve los valores de las propias propiedades enumerables con clave de cadena en el mismo orden proporcionado por el for...in
bucle:
const foods = {
cake: '🍰',
pizza: '🍕',
candy: '🍬',
icecream: '🍨'
};
const values = Object.values(foods);
console.log(values);
// ['🍰', '🍕', '🍬', '🍨']
Ambos Object.values()
y Object.entries()
no siga la cadena de prototipos y solo itere a través de las propiedades que se agregan directamente al objeto dado. También ignoran todas las propiedades no enumerables:
Object.defineProperty(foods, 'sushi', {
value: '🍣',
writable: true,
configurable: true,
enumerable: false
});
console.log(Object.values(foods));
// ['🍰', '🍕', '🍬', '🍨']
Convertir un objeto en conjunto
Dado que el constructor Set acepta un iterable, con Object.values()
, podemos convertir fácilmente un Object
a un Set
:
const set = new Set(Object.values(foods));
console.log(set.size); // 4
console.log(set.has('🍨')); // true