Object.Assign не создает новые экземпляры

У меня есть следующий код, создающий полезную нагрузку действия для Redux:

  export function getInfoFromAPI() {
  const initialAction = {
    type: types.GET_SETTLE_SHEETS_FROM_LOCAL_API
  };
  let returnedAction = {};
  let payloadBuild = {};
  return dispatch => {
    return APItools.getInfoFromLocalAPI()
      .then(jsonResult => {
        Object.keys(jsonResult).map( (resultArrayId) => {
          debugger;
          const { foo, bar, foobar, foofoo, barbar} = jsonResult[resultArrayId];
          payloadBuild = _.merge({}, 
            {
              [barbar]: {
                foo: foo,
                bar: bar,
                foobar: foobar,
                foofoo: foofoo,
                barbar: barbar
              }
            });
        });
        returnedAction = Object.assign({}, initialAction,
          {
            payload: payloadBuild
          });
        dispatch(returnedAction);
      });
  };
}

Я пытаюсь создать один объект json, который будет охватывать данные, поступающие из моего локального API. Когда я раньше использовал Object.assign(), он работал, добавляя информацию на основе ключа и добавляя ее к уже существующему объекту, как вы и предполагали.

Я пробовал lodash _.merge() и Object.assign оба, переключая их, и, похоже, это не работает... он продолжает перезаписывать ключ [barbar] следующим значением, поступающим с карты функция, хотя это было бы похоже на

[barbar] = 1 

тогда

[barbar] = 2

Он заменит ключ и всех его детей... почему? А также как мне это исправить? Когда я раньше использовал Object.assign, он просто добавлял новые ключи к объекту, но я думаю, что это было только по одному за раз. Это первый раз, когда я использую карту, которая, как я полагаю, просто продолжит добавлять новые объекты с их уникальными значениями ключей.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
147
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы забываете слиться со своими старыми ценностями

let buildValue = {}

arrayWithStuff.map(info => {
  buildValue = Object.assign(buildValue, {
    [info.bar] : {
      Other stuff..
    })

Вы объединяете каждый результат с новым пустым объектом (первый аргумент).

Удачи!

Ага! Я только что нашел это, как вы написали :-) спасибо. Я отмечу ваш ответ как ответ, чтобы дать вам им баллы! :)

glitchwizard 13.03.2019 06:54

Нашел ответ:

payloadBuild = _.merge({}, payloadBuild <---- this needed to be added
            {
              [barbar]: {
                foo: foo,
                bar: bar,
                foobar: foobar,
                foofoo: foofoo,
                barbar: barbar
              }
            });

Другие вопросы по теме