Object.Assign не создает новые экземпляры - PullRequest
0 голосов
/ 13 марта 2019

У меня есть следующий код, создающий полезную нагрузку для 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 ранее, он просто добавлял новые ключи к объекту, но я думаю, что это был только один раз за раз. Это первый раз, когда я использую карту, которая, как я предполагаю, просто продолжит добавлять новые объекты с их уникальными значениями ключа.

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы забыли объединить свои старые значения

let buildValue = {}

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

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

Удачи!

0 голосов
/ 13 марта 2019

Нашел ответ:

payloadBuild = _.merge({}, payloadBuild <---- this needed to be added
            {
              [barbar]: {
                foo: foo,
                bar: bar,
                foobar: foobar,
                foofoo: foofoo,
                barbar: barbar
              }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...