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