【问题标题】:Object.Assign not creating new instancesObject.Assign 不创建新实例
【发布时间】:2019-03-13 05:19:31
【问题描述】:

我有以下代码,为 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);
      });
  };
}

我正在尝试构建一个包含来自本地 API 的数据的 json 对象。当我之前使用过 Object.assign() 时,它会根据键添加信息,并将其附加到预先存在的对象上,就像你想象的那样。

我已经尝试了 lodash _.merge() 和 Object.assign 两者,切换它们,它似乎没有工作......它不断用下一个值覆盖键 [barbar]从地图功能,即使它会像

[barbar] = 1 

然后

[barbar] = 2

它将取代钥匙和它所有的孩子......为什么?还有我该如何解决这个问题?当我之前使用过 Object.assign 时,它只会将新键附加到对象上,但我认为它一次只有一个。这是我第一次使用 map,我认为它会继续使用它们的唯一键值附加新对象。

【问题讨论】:

    标签: javascript reactjs object redux mapping


    【解决方案1】:

    您忘记合并旧值

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

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

    祝你好运!

    【讨论】:

    • 是的!我刚刚发现你发布的:-)谢谢。我会将您的答案标记为答案,尽管给您积分! :)
    【解决方案2】:

    找到答案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多