Можно ли как то упростить данный код или подправить данные json?

Задача связана именно с json объектом не использовав субд.
Есть объект данных:

{
  [section]: {
    [category]: [{id: 1, name: 'Product-1'}, {id: 2, name: 'Product-2'}],
    [category]: [{id: 3, name: 'Product-3'}],
  },
  [section]: {
    [category]: [{id: 4, name: 'Product-4'}],
  }
}

По этим данным я делаю такую маршрутизацию

GET /api/product/:id // Получение информаций о продукте

Для получения информаций о продукте, я написал такой код

exports.findById = (req, res) => {
    const { id } = req.params;
    const result = [];
    Object.values(data).forEach((section) => {
        Object.values(section).forEach((category) => {
            category.forEach((product) => {
                if (product.id == id) result.push(product);
            });
        });
    });

    if (result.length > 0) return res.status(200).json(result[0]);

    return res.status(404).json({ ok: false, message: 'Not Found' });
};

Протестировав данный код, я получил следующие результаты:

  • GET /api/product/1 Результат ответа по времени 3ms
  • GET /api/product/99 Результат ответа по времени 9ms
    И меня смущает разница в 6ms, видимо это он обрабатывает повторяющиеся данные. И подумал может изменить структуру json с api маршрутизаций или еще как то код написать, а может зря переживаю?

Ответы (1 шт):

Автор решения: vsemozhebuty

Кажется, у вас постоянно совершается много пустой работы. Возможно, вам стоит создать что-то вроде вспомогательной структуры типа Map, один раз пройтись по data и заполнить Map ключами из id и значениями со ссылками на объекты. Тогда вы сможете мгновенно получать нужный объект по id без перебора вложенных структур. Map можно обновлять каждый раз, как обновляется ваша основная структура data, если она вам необходима в таком виде для других нужд.

→ Ссылка