#javascript #reactjs #object #redux #mapping
#javascript #reactjs ( реакция ) #объект #сокращение #отображение #reactjs #переопределение #сопоставление
Вопрос:
У меня есть следующий код, создающий полезную нагрузку действия для 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] следующим значением, поступающим из функции map, даже если это было бы похоже
[barbar] = 1
тогда
[barbar] = 2
Это заменит ключ и все его дочерние элементы …. почему? А также как мне это исправить? Когда я использовал Object.assign раньше, он просто добавлял новые ключи к объекту, но, я думаю, это было только по одному за раз. Это первый раз, когда я использую map, который, как я предполагаю, просто продолжит добавлять новые объекты с их уникальными ключевыми значениями.
Ответ №1:
Вы забываете объединить свои старые значения
let buildValue = {}
arrayWithStuff.map(info => {
buildValue = Object.assign(buildValue, {
[info.bar] : {
Other stuff..
})
Вы объединяете каждый результат с новым пустым объектом (первый аргумент).
Удачи!
Комментарии:
1. Да! Я только что нашел это, как вы опубликовали 🙂 спасибо. Я отмечу ваш ответ как ответ, чтобы дать вам очки! 🙂
Ответ №2:
Найден ответ:
payloadBuild = _.merge({}, payloadBuild <---- this needed to be added
{
[barbar]: {
foo: foo,
bar: bar,
foobar: foobar,
foofoo: foofoo,
barbar: barbar
}
});