bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Создать объект на основе массива?

Здравствуйте. Есть массив, нужно его значения сделать ключами и добавить в значения другой обьект. Вот работающий пример, может здесь можно как-то оптимальне все написать? Спасибо

const arr = [1,2,3];
const objVal = { current: 0, deffault: 1 };

const result = { };
arr.forEach( v => Object.assign(result, { [v]: objVal } ) );

console.log(result);
// { '1': { current: 0, deffault: 1 },
//  '2': { current: 0, deffault: 1 },
//  '3': { current: 0, deffault: 1 } }
  • Вопрос задан
  • 765 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Суть также, без цикла не обойтись:
const arr = [1,2,3];
const objVal = { current: 0, deffault: 1 };

const result = arr.reduce((p,c) => {p[c] = objVal; return p;}, {});
// {"1":{"current":0,"deffault":1},"2":{"current":0,"deffault":1},"3":{"current":0,"deffault":1}}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dummyman
@dummyman
диссидент-схизматик
Конечно, можно написать оптимальнее.
Есть одно негласное правило JS:
Определяй структуру объекта в конструкторе и никогда не меняй после!

Еще хуже добавлять объекту свойства в цикле.

Так будет точно правильнее
function AObj(arr){
    arr.forEach( v => Object.assign(this, { [v]: objVal } ) );
}
var aObj = new AObj([1,2,3]);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы