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

Клонирование объекта?

Здравствуйте. Столкнулся с тем что некорректный результат при изменении значений объекта. Он получается как бы клонировался, и при изменении значения в одном ключе, меняются и в другом
const objVal = { current: 0, deffault: 1 };
const arrKey = [1,2,3];

const aObj = new function(arr, obj) {
  arr.forEach( v => Object.assign( this, { [v]: obj } ) );
}(arrKey, objVal);

aObj['1'].current = 10;

console.log(aObj); .
// { '1': { current: 10, deffault: 1 },
//  '2': { current: 10, deffault: 1 },
//  '3': { current: 10, deffault: 1 } }


вроде можно так переписать строку, но может есть лучшее решение?
arr.forEach(v => Object.assign(this, { [v]: Object.assign({}, obj) }));
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 1
lazalu68
@lazalu68
Salmon
Вы перемудрили. Без шуток.

Если под лучше вы подразумеваете быстрее, то лучше абсолютно любое решение, даже откровенно в лоб:

Plain object creation
const keys = [1,2,3,4,7];
const final_object = {};

for (var i = 0; i < keys.length; i++) {
	final_object[ keys[i] ] = { current: 0, default: 1 }; 
}
Plain + Constructor
const keys = [1,2,3,4,7];
const final_object = {};
const UnknownObject = function() {
	this.current = 0;
	this.default = 1;
}

for (var i = 0; i < keys.length; i++) {
	final_object[ keys[i] ] = new UnknownObject();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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