Я реализовал метод для фильтрации товаров по указанным опциям. Метод принимает в качестве параметра объект options, который содержит параметры для поиска, например: {name: "item 2", price: "<= 1000", count: "> 2"}, каждый из параметров является опциональными. Метод должен возвращать отфильтрованный массив с товарами. filterProductBy (options).
Мне удалось фильтровать по имени. Скажите, как правильно фильтровать по числу
обязательное условие передачи в таком виде: console.log(shop.filterProductsBy({
name: "product",
count: ">=10",
price: ">=200" }));
Весь код://Product Creation Class
class Product {
constructor(name, count, price) {
this.name = name;
this.count = count;
this.price = price;
}
}
//Сlass where products are recorded
class Shop {
constructor(products) {
this.products = [];
}
//method for adding a product
addProduct(newProduct) {
this.products.push(newProduct);
}
//method for filtering products by specified parameters
filterProductBy(options) {
const optionName = options.name,
optionCount = options.count,
optionPrice = options.price;
const filters = {
byName: function (actualName, optionName) {
return (actualName === undefined) || (actualName === optionName);
},
byCount: function (actualCount, optionCount) {
return (actualCount === undefined) || (actualCount === optionCount);
},
byPrice: function (actualPrice, optionPrice) {
return (actualPrice === undefined) || (actualPrice === optionPrice);
}
};
return this.products.filter(
(product) => filters.byName(product.name, optionName)
|| filters.byCount(product.count, optionCount)
|| filters.byPrice(product.price, optionPrice));
}
}
const shop = new Shop();
shop.addProduct(new Product("product 1", 1, 2000));
shop.addProduct(new Product("item 2", 2, 100));
shop.addProduct(new Product("some 3", 3, 500));
shop.addProduct(new Product("anything 4", 4, 1000));
console.log(shop.filterProductBy({
name: "product 1",
count: ">1",
price: "<=1000"}));