Object.entries() a Object.values() v JavaScriptu

Object.entries() a Object.values() metody byly zavedeny do JavaScriptu Object konstruktor s vydáním ECMAScript 2017 (ES8). Pojďme se rychle podívat na tyto užitečné metody.

Object.entries() Metoda

Object.entries() metoda vezme objekt jako argument a vrátí pole s poli párů klíč-hodnota:

const birds = {
    owl: '🦉',
    eagle: '🦅',
    duck: '🦆'
};

const entries = Object.entries(birds);
console.log(entries);

// [['owl', '🦉'], ['eagle', '🦅'], ['duck', '🦆']]

Pořadí prvku pole nezávisí na tom, jak byl objekt definován. Pořadí je stejné jako u for...in smyčka.

Iterace přes objekt

Můžeme použít Object.entries() iterovat také přes objekt:

// 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: 🦆

Převod objektu na mapu

Protože konstruktor mapy také bere iterovatelnost entries pro inicializaci objektu mapy Object.entries() metodu lze použít k vytvoření mapy z objektu:

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() Metoda

Object.values() metoda funguje velmi podobně jako Object.entries() , ale vrací pouze hodnoty vlastních vyčíslitelných vlastností s klíčem řetězce ve stejném pořadí, jaké poskytuje for...in smyčka:

const foods = {
    cake: '🍰',
    pizza: '🍕',
    candy: '🍬',
    icecream: '🍨'
};

const values = Object.values(foods);
console.log(values);

// ['🍰', '🍕', '🍬', '🍨']

Oba Object.values() a Object.entries() nesledujte prototypový řetězec a pouze iterujte přes vlastnosti, které jsou přímo přidány k danému objektu. Také ignorují všechny nevyčíslitelné vlastnosti:

Object.defineProperty(foods, 'sushi', {
    value: '🍣',
    writable: true,
    configurable: true,
    enumerable: false
});

console.log(Object.values(foods));

// ['🍰', '🍕', '🍬', '🍨']

Převod objektu na sadu

Protože konstruktor Set akceptuje iterovatelné, s Object.values() , můžeme snadno převést Object na Set :

const set = new Set(Object.values(foods));

console.log(set.size); // 4
console.log(set.has('🍨')); // true