I have a set which needs to be converted into an object with the set's unique values as the object keys and an empty string as each element's value in the object.
Here is the set I'm working with:
const uom = new Set(['inches', 'centimeters', 'yards', 'meters']);
I've tried this:
const uomObj = {...[...uom]};
console.log(uomObj);
Which yields this:
Object {
"0": "inches",
"1": "centimeters",
"2": "yards",
"3": "meters",
}
but that does not match the desired result of:
Object {
"inches": "",
"centimeters": "",
"yards": "",
"meters": "",
}
Can this be achieved with an ES6 approach? If so, how?
Create an object, then loop over the values in the set and create a property for each one. The reduce method is probably the most compact way to do that. Show activity on this post. Show activity on this post.
The Set object lets you store unique values of any type, whether primitive values or object references.
Sets are supposed to contain unique objects, but it doesn't work for objects in javascript.
You can use Array.from
with a mapping function to convert each value inside your set into an object and then use Object.assign()
with the spread syntax to merge the array of objects into a single resulting object like so:
const uom = new Set(['inches', 'centimeters', 'yards', 'meters']);
const res = Object.assign(...Array.from(uom, v => ({[v]:''})));
console.log(res);
Here's one way:
[...uom].reduce((o, u) => {
o[u] = '';
return o;
}, {})
Create an object, then loop over the values in the set and create a property for each one. The reduce
method is probably the most compact way to do that.
const uom = new Set(['inches', 'centimeters', 'yards', 'meters']);
const result = Array.from(uom).reduce( (a,c) => { a[c]=""; return a; }, {});
console.log(result);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With