Проверка ключей:значений двух 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));
→ Ссылка