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