JavaScript maps provide a convenient way to store key-value pairs, similar to plain objects but with some key differences like ordered keys and more flexibility. Often you may want to work with the values in a map through an array instead, for easier iteration and leverage of array methods. This guide explains different approaches to convert map values into arrays using built-in methods.
JavaScript Map Review
Let‘s briefly recap maps in JavaScript. Maps can be created using:
const myMap = new Map();
You can then set key-value pairs using the set() method:
myMap.set(‘name‘, ‘John‘);
myMap.set(‘age‘, 30);
Maps maintain insertion order of elements, allow different data types for keys, and directly support primitive values.
Some key Map methods are:
- set() – add element
- get() – access element by key
- delete() – remove element by key
- clear() – remove all elements
- keys() – returns keys iterator
- values() – returns values iterator
- entries() – returns [key,value] pairs iterator
Why Convert Map to Array?
There are several motivations for converting a map‘s values into an array:
- To iterate through values using array methods like forEach(), map(), filter() etc. which can be easier than using the keys() or values() iterators directly
- To obtain a static snapshot of current values to work with
- To leverage other Array properties and helpers further in code
- To display data in an array format for output
- To integrate nicely with other array-based operations
So while maps provide fast key-based lookups, arrays open up convenience through many provided methods.
Array.from()
The most straight-forward approach is using the Array.from() method:
const myMap = new Map();
myMap.set(‘val1‘, ‘a‘);
myMap.set(‘val2‘, ‘b‘);
const arrayFromMapValues = Array.from(myMap.values());
console.log(arrayFromMapValues);
// [‘a‘, ‘b‘]
Breaking this down:
- Create a map and add some values
- Get an iterator of the values using
myMap.values()
- Pass that iterator to
Array.from
to convert iterator to array
The Array.from() method accepts any iterable or array-like data as input and converts it into an array. Some other examples of Array.from usage:
Array.from(‘text‘); // [‘t‘,‘e‘,‘x‘,‘t‘]
Array.from(document.querySelectorAll(‘div‘)); //array of div elements
So by passing in the value iterator, those values get populated sequentially into the new array.
Spread Operator
Another approach is to use the spread syntax which can expand iterables into arrays similarly:
const myMap = new Map();
myMap.set(‘val1‘, ‘a‘);
myMap.set(‘val2‘, ‘b‘);
const arrayFromMapValues = [...myMap.values()];
console.log(arrayFromMapValues);
// [‘a‘, ‘b‘]
Here the ...
spread operator does the conversion concisely in one step.
The spread syntax converts iterables into individual elements, cloning them into the new array. This happens under the hood using iteration much like Array.from()
.
Convert Map Keys and Entries
In addition to map values, the keys or entries can be converted as well using map.keys()
or map.entries()
:
const keyArray = [...myMap.keys()];
// [‘val1‘, ‘val2‘]
const entryArray = [...myMap.entries()];
// [[‘val1‘, ‘a‘], [‘val2‘, ‘b‘]]
This provides arrays containing either the keys or key-value pair entries from the original map.
Comparing Approaches
Both the Array.from() method and spread syntax accomplish the main goal of converting map values to arrays. Some differences:
- Spread syntax is more concise with less code
- Array.from() is a bit more verbose but clarity of intent can be useful
- Spread requires ES6 support unlike Array.from()
- Performance is typically comparable
So choose based on syntax preference and environment support.
Use Cases
Common use cases for converting maps to arrays:
- Retrieving data from an API and storing in map for access by an identifier property, then converting to array for display in lists etc.
- Using sets for unique values, then maps for metadata, finally arrays for iteration
- Alternating between map and array as needed for algorithms
- Converting Map to JSON by first converting to array
Summary
JavaScript Maps provide fast key-value access but arrays open up many useful iterative methods. Converting values to arrays can be done cleanly using Array.from() and spread syntax:
Array.from(myMap.values());
// or
[...myMap.values()];
The same approaches work for map keys and entries as well. Choose the most fitting technique for your use case and environment.
I hope this guide gives you a solid grasp on working with maps and arrays together!