Проверка ключей:значений двух JSON
Есть 2 JSON файла, один основной, там есть {id:1} и второй, где есть {subId:1}. Как связать два этих JSON, чтобы отрисовать из них данные(1-ый это основной товар, а 2-ой всякие допы). Загвоздка ещё в том, что значения не уникальные, может быть {count:1} например. То есть надо как-то по ключам сравнивать. Ниже пример.
{
"Value": {
"Params": [
{ "Cost": 158, "GroupID": 1, "Quantity": 1, "ID": 1 },
{ "Cost": 222, "GroupID": 2, "Quantity": 1, "ID": 4 }
]
}
}
{
"1": {
"Group": "Товары",
"Units": {
"1": {
"Name": "Товар 1",
}
}
},
"2": {
"Group": "Товары 2",
"Units": {
"4": {
"Name": "Товар 2",
}
}
}
}
Ответы (1 шт):
Для вашей задачи вам нужно замапить два json'а в нужную вам структуру, сделать это можно следующим образом (скрипт написан в моем видении структуры, вы можете на основе него собрать уже свою, главное, чтобы в общем смысле было понятно, что там происходит):
const generateGoodsCart = (groups, adds) => Object
.keys(adds) // извлекаем ключи (названия дополнений)
.reduce((acc, addsName) => {
const { Params } = adds[addsName];
Params.forEach((param) => {
const { [param.GroupID]: group } = groups; // извлекаем группу
if (!group) return;
if (!acc[param.GroupID]) {
// если в генерируемой модели отсутствует группа
// то добавляем данную структуру
acc[param.GroupID] = {
groupId: param.GroupID,
groupName: group.Group,
additionals: [],
};
}
const { Units: { [param.ID]: unit } } = group; // извлекаем юнит
if (!unit) return;
// добавляем структуру дополнений к товару
acc[param.GroupID].additionals.push({
unitId: param.ID,
unitName: unit.Name,
cost: param.Cost,
quantity: param.Quantity,
});
});
return acc;
}, {});
const goodsCart = generateGoodsCart(groups, adds);
Мы получим такую структуру (в примере только часть полученных данных):
{
1: {
groupId: 1,
groupName: 'Товары',
additionals: [
{
cost: 222,
quantity: 1,
unitId: 4,
unitName: 'Товар 2',
},
],
},
}
Так же, так как мы сохраняем groupId в нашей структуре, мы можем извлечь только массив (будет удобнее использовать в итерациях) нужных нам значений при помощи Object.values:
const goodsCart = Object.values(generateGoodsCart(groups, adds));