object.sign不创建新实例



我有以下代码,为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.sign()时,它会根据键添加信息,并将其附加到预先存在的对象上,并以您认为的方式。

我已经尝试了lodash _.merge(),然后对object.sign兼具,将它们切换到周围,并且似乎无法正常工作...它不断覆盖键[barbar],下一个值出现从地图功能中,即使它就像

[barbar] = 1 

然后

[barbar] = 2

它将取代钥匙和所有孩子。...为什么?以及我该如何解决?当我使用object。这是我第一次使用地图,我认为这只会继续附加具有其唯一键值的新对象。

您忘记在旧值中合并

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

您将每个结果与一个新的空对象(第一个参数)合并。

祝你好运!

找到答案:

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

最新更新