'JavaScript, how to create an object out of an array?

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?



Solution 1:[1]

Try this:

const data = ['foo', 'bar', 'baz']
const asObject = Object.fromEntries(data.map(d => ([d, true])))

console.log(asObject)

Solution 2:[2]

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.

Solution 3:[3]

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);

Solution 4:[4]

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)

Solution 5:[5]

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})

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ben Clayton
Solution 2 Pointy
Solution 3 Mr. Polywhirl
Solution 4
Solution 5