Let’s talk about the fact that we have a simple brandModel Car object.

let brandModelCar = { Tesla: "S", Ford: "Mustang", Citroen: "2CV"};

How can we iterate the properties of that object?

We need to use functions like Objects.entries which returns an array with the properties key-value from the object.

let brandModelCar = { "Tesla": “S”, "Ford": “Mustang”, "Citroen": “2CV” }; for (let [brand, model] of Object.entries(brandModelCar){

console.log(brand, model);

} // Output

Tesla S

Ford Mustang

Citroen 2CV

Another function than we can use is Object.keys for the keys which returns an array of a given object’s own enumerable property names.

let brandModelCar = { "Tesla": “S”, "Ford": “Mustang”, "Citroen": “2CV” }; for (let brand of Object.keys(brandModelCar)) {

console.log(brand);

} // Output

Tesla

Ford

Citroen

Or Object.values for the values which returns an array of a given object’s own enumerable property values.

let brandModelCar = { "Tesla": “S”, "Ford": “Mustang”, "Citroen": “2CV” }; for (let model of Object.values(brandModelCar)) {

console.log(model);

} // Output

S

Mustang

2CV

But the most simple option is,

new Map( [iterable] );

This object have one argument (iterable)

iterable -> Optional. An Array or other iterable object whose elements are key-value pairs (arrays with two elements, e.g. [[ 1, 'one' ],[ 2, 'two' ]] ). Each key-value pair is added to the new Map .

So let´s create our object with a Map and then iterate,

let brandModelCar = new Map([

["Tesla", "S"],

["Ford", "Mustang"],

["Citroen", "2CV"]

]); for (let [brand, model] of brandModelCar) {

console.log(brand, model);

} // Output

Tesla S

Ford Mustang

Citroen 2CV

Problem with the object keys?

The keys of an Object are String and Symbol , whereas they can be any value for a Map , including functions, objects, and any primitive.

With Map , you can use any value as a key, even an object (see also WeakMap).

let brandModelCar = new Map([

[{ "1": "Tesla" }, "S"],

[{ "2": "Ford" }, "Mustang"],

[{ "3": "Citroen" }, "2CV"]

]); for (let [brand, model] of brandModelCar) {

console.log(brand, model);

} // Output

{ '1': 'Tesla' } 'S'

{ '2': 'Ford' } 'Mustang'

{ '3': 'Citroen' } '2CV'

Also with Map you can declare functions as keys like,

let brandModelCar = new Map([[callMe, “S”]]); function callMe() {

console.log(“Tesla”);

} for (let [brand] of brandModelCar) {

console.log(brand());

}

Problem determining the number of properties of an Object?

let brandModelCar = { "Tesla": “S”, "Ford": “Mustang”, "Citroen": “2CV” }; console.log(Object.keys(brandModelCar).length); // 3

Map have the size property,

let brandModelCar = new Map([

[{ "1": "Tesla" }, "S"],

[{ "2": "Ford" }, "Mustang"],

[{ "3": "Citroen" }, "2CV"]

]); console.log(brandModelCar.size); // 3

In summary for Map