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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы забываете слиться со своими старыми ценностями
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
}
});
Ага! Я только что нашел это, как вы написали :-) спасибо. Я отмечу ваш ответ как ответ, чтобы дать вам им баллы! :)