Значение массива для имени свойств javascript

#javascript #arrays #json #shortest

#javascript #массивы #json #кратчайший

Вопрос:

Существует ли однострочный способ преобразования значения массива в имя свойства объекта?

Пример:

 var arr = ['name', 'age', 'size'];
  

Для

 {'name' :null, 'age':null, 'size':null}
  

На самом деле я обрабатываю так:

 var arr = ['name', 'age', 'size'];
let obj = {};
arr.map(z => obj[z] = null);
  

Я полагаю, что это самый короткий путь, но я не уверен.

Комментарии:

1. Вместо этого вы могли бы использовать reduce.

Ответ №1:

Использовать reduce :

 arr.reduce((prev, curr) => {
  return Object.assign(prev, {[curr]: null})
}, {})
  

или вы можете однострочно, если хотите, но имо это выглядит хуже, чем:

 arr.reduce((prev, curr) => Object.assign(prev, {[curr]: null}), {})
  

Обратите внимание, что Object.assign это лучший способ закодировать это, а не использовать spread operator ( {... } ) .

Оператор распространения создает НОВЫЙ объект каждый цикл. Это может привести к большим проблемам с производительностью.

Object.assign с другой стороны, работает с первым объектом.

Комментарии:

1. Спасибо за информацию о назначении, это будет хорошим ответом.

2. Не знал, Object.assign вернул целевой объект, хороший!

Ответ №2:

reduce может превратить его в однострочный:

 var obj = arr.reduce((acc, curr)=> ({...acc, [curr]: null}),{})
  

Ответ №3:

Вы можете использовать Array.prototype.reduce метод для преобразования массива в другой тип

 var arr = ["name", "age", "size"];

let output = arr.reduce((accumulator, current) => {
  return {...accumulator, [current]: null}
}, {})

console.log(output);