3

A similar question was asked here but unfortunately not appropriately answered.

I have my aura map declared as follows

<aura:attribute name="productInfoMap" type="Map" default="{}"

in my javascript controller I create the following:

let productInfoMap = new Map();

I'm not going to go into the very lengthy logic of assigning the map values but a console.log of the final result reads pretty normally:

Map(3) {"0WOP00000004XXXXX" => undefined, "0WOP0000000XXXXX" => Array(2), "0WOP0000000XXXXX" => Array(2)}
size: 3
__proto__: Map
[[Entries]]: Array(3)
0: {"0WOP0000000XXXXX" => undefined}
1: {"0WOP0000000XXXXX" => Array(2)}
2: {"0WOP0000000XXXXX" => Array(2)}

however, setting the aura attribute to the javascript map like so:

component.set("v.productInfoMap", productInfoMap);

and trying to access the values gives me the following error:

[[Handler]]: Object
[[Target]]: Map
size: [Exception: TypeError: Method get Map.prototype.size called on incompatible receiver #<Map> at Map.get size [as size] (<anonymous>) at Map.invokeGetter (<anonymous>:2:14)]
__proto__: Map

What am I doing wrong? should I give up and just make a new js Object as opposed to a JS map?

3

Don't use the Map type, just use object notation.

Instead of:

let productInfoMap = new Map();

Use:

let productInfoMap = {};

Also, better to use const if you don't reassign, which seems unlikely to be necessary in this scenario.

  • Ahh, thank you. Figured I'd have to give up on the map. – Sugam Manocha May 7 at 12:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.