Object.entries() y Object.values() en JavaScript

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