Не уверен, что lodash
делает под капотом, но вложенный цикл for, как это обычно занимает O(n^2)
время;однако, используя хеш-карты, вы можете сократить это время до O(n)
, например,
const productCategoryIds = [111,222,333,444,555];
const mappedProductCategoryIds = productCategoryIds.reduce((obj, id) => {
obj[id] = true;
return obj;
}, {});
const products = await this.getProductByProductCategories(productCategoryIds); //Does mysql call whereIn ... which I will not include here.
const productSubset = products.filter(product => mappedProductCategoryIds[product.product_category_id]);
//Do something with productSubset
Сначала мы проведем итерацию по productCategoryIds
и создадим хеш-карту (mappedProductCategoryIds
), по которой мы можем проверитьproduct_category_id
любого product
, просто проверяя, является ли значение ключа product_category_id
в этой хэш-карте mappedProductCategoryIds
равным truthy
(т. е. true
) или falsey
(т. е. undefined
). (Поиск по хеш-карте занимает O(1)
раз.)
JavaScript filter()
соберет product
, если mappedProductCategoryIds
содержит его product_category_id
;в противном случае он отклонит его.