У меня проблема с объединением двух наборов данных по условию. Я отлаживал больше часа, но не мог понять почему. Я создал образец ниже.
У меня есть 2 данные:
const staticRockData = {
rockTypes: [
{
supplierRockTypes: [
{
rockCodes: ["1"],
match_id: "abc"
},
{
rockCodes: ["2"],
match_id: "abc"
}
]
}
]
};
const gatewayRockData = {
match_id: "abc",
rocks: [{ rock_type: "1", rates: [] }, { rock_type: "2", rates: [] }]
};
У меня есть эта логика сопоставления:
let rockTypes = staticRockData.rockTypes;
rockTypes = rockTypes.reduce((accum, rockType) => {
const matchedSourceId = rockType.supplierRockTypes.some(
o2 => o2.match_id === gatewayRockData.match_id
);
if (matchedSourceId) {
gatewayRockData.rocks.forEach(rock => {
const matchRockType = rockType.supplierRockTypes.some(o2 => {
return o2.rockCodes.includes(rock.rock_type);
});
if (matchRockType) {
console.log("rock.rock_type", rock.rock_type);
rockType = {
...rockType,
rock_type: rock.rock_type,
rates: rock.rates
};
}
});
}
accum = [...accum, { ...omit(rockType, "supplierRockTypes") }];
return accum;
}, []);
return {
rocks: rockTypes
};
и я ожидал этого:
rocks: [
{
rates: [],
rock_type: "1"
},
{
rates: [],
rock_type: "2"
}
]
}
В текущем решении отсутствует это:
{ rates: [], rock_type: "1"}
, интересно, где моя ошибка.
Пропустить - это функция Лодаша omit
, но я не думаю, что это виновник. Я создал демо здесь:
https://codesandbox.io/s/condescending-platform-1jp9l?fontsize=14&previewwindow=tests