Object.entries() and Object.values() Methods in JavaScript
Atta
Posted on August 22, 2019
This post was originally published on attacomsian.com/blog.
The Object.entries()
and Object.values()
methods were introduced to JavaScript Object
constructor with the release of ECMAScript 2017 (ES8). Let us have a quick look at these useful methods.
Object.entries()
Method
The Object.entries()
method takes an object as argument and returns an array with arrays of key-value pairs:
const birds = {
owl: 'π¦',
eagle: 'π¦
',
duck: 'π¦'
};
const entries = Object.entries(birds);
console.log(entries);
// [['owl', 'π¦'], ['eagle', 'π¦
'], ['duck', 'π¦']]
The order of the array element do not depend on how the object was defined. The order is same as that provided by a for...in
loop.
Iterating through an Object
We can use Object.entries()
to iterate over object as well:
// 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: π¦
Converting an Object to a Map
Since the Map constructor also takes an iterable of entries
to initialize a map object, the Object.entries()
method can be used to create a map from an object:
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()
Method
The Object.values()
method works very much like Object.entries()
, but only returns the values of the own enumerable string-keyed properties in the same order as provided by the for...in
loop:
const foods = {
cake: 'π°',
pizza: 'π',
candy: 'π¬',
icecream: 'π¨'
};
const values = Object.values(foods);
console.log(values);
// ['π°', 'π', 'π¬', 'π¨']
Both Object.values()
and Object.entries()
do not follow the prototype chain and only iterate through the properties that are directly added to the given object. They also ignore all non-enumerable properties as well:
Object.defineProperty(foods, 'sushi', {
value: 'π£',
writable: true,
configurable: true,
enumerable: false
});
console.log(Object.values(foods));
// ['π°', 'π', 'π¬', 'π¨']
Converting an Object to Set
Since the Set constructor accepts an iterable, with Object.values()
, we can easily convert an Object
to a Set
:
const set = new Set(Object.values(foods));
console.log(set.size); // 4
console.log(set.has('π¨')); // true
βοΈ I write about modern JavaScript, Node.js, Spring Boot, and all things web development. Subscribe to my newsletter to get web development tutorials & protips every week.
Like this article? Follow @attacomsian on Twitter. You can also follow me on LinkedIn and DEV.
Posted on August 22, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.