Как добавить в объект другой объект в тот же ключ?

Всем доброго вечера. Не получается преобразовать объект. Так то почти получилось, вот только не пойму, как на тот же ключ записать еще одно значение не переписав старое.
То что на входе.
const edit = {
    300: {400: '100', 500: '200'},
    400: {400: '200'}
};

const edit = {
    300: {400: '100', 500: '200'},
    400: {400: '200'}
};

const getUniqueKeys = prices => {
  const arr = [];
  for (const key in prices) {
    if (Object.prototype.hasOwnProperty.call(prices, key)) {
      arr.push(prices[key]);
    }
  }
  return Object.keys(arr.reduce((result, obj) => Object.assign(result, obj), {}));
};

const uK = getUniqueKeys(edit);
const arrk = Object.keys(edit);

const newEdit = {};
for (let i = 0; i < arrk.length; i++) {
    for (let y = 0; y < uK.length; y++) {
        if (Object.keys(edit[arrk[i]])[y] === uK[y]) {
            newEdit[uK[y]] = {[arrk[i]]: Object.values(edit[arrk[i]])[y]};
        }
    }
}
console.log('newEdit ', newEdit);


То что должно быть на выходе
const newObj = {
    400: {300: '100', 400: '200'},
    500: {300: '200'}
};

Сложность в строке
newEdit[uK[y]] = {[arrk[i]]: Object.values(edit[arrk[i]])[y]};

Что приводит к затиранию первого значения и на выходе получается
newObj = {
    400: {400: '200'},
    500: {300: '200'}
};

А должно получиться
newObj = {
    400: {300: '100', 400: '200'},
    500: {300: '200'}
};
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Вместо строки:
newEdit[uK[y]] = {[arrk[i]]: Object.values(edit[arrk[i]])[y]};

Напишите:
newEdit[uK[y]] = Object.assign(newEdit[uK[y]]||{},{[arrk[i]]: Object.values(edit[arrk[i]])[y]});

P.S. В суть кода не вникал, но это универсальное решение, так что должно помочь. А так наверняка можно отрефакторить код так, чтобы вносить изменения и улучшения было бы легко и приятно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы