Reputation: 2121
I would like to convert an array that looks like this:
['foo', 'bar', 'baz']
to an object that looks like this:
{
foo: true,
bar: true,
baz: true,
}
In most languages you would have some form of fill(keys, value)
function:
var array = ['foo', 'bar', 'baz'];
var object = fill(array, true);
// object = { foo: true, bar: true, baz: true}
But in JS I can only find one for numeric keys using a range, not a list of keys. Is there a fill function that will do exactly that?
Upvotes: 1
Views: 91
Reputation: 67
You can create a new object, loop over the array and add each value to it.
let arr = ['foo','bar','baz'];
let obj={};
arr.forEach(el => {obj[el] = true})
Upvotes: 0
Reputation: 46291
There isn't such function as fill(keys, value)
that you mentioned, but you could also do so:
let tab = ['foo', 'bar', 'baz'];
let obj = {}
tab.forEach(v=>{obj[v]=true});
console.log(obj)
Upvotes: 1
Reputation: 48751
You can map the array values to entries (key, value pairs) and then transform the matrix into an object.
const
arr = ['foo', 'bar', 'baz'],
obj = Object.fromEntries(arr.map(v => [v, true]));
console.log(obj);
Upvotes: 1
Reputation: 82267
Try this:
const data = ['foo', 'bar', 'baz']
const asObject = Object.fromEntries(data.map(d => ([d, true])))
console.log(asObject)
Upvotes: 5
Reputation: 414036
You can build an object with .reduce()
:
var object = array.reduce((o, e) => (o[e] = true, o), {});
edit — or the clever Object.fromEntries()
solution mentioned in a comment.
Upvotes: 2