@alexey__pereverzev

Где ошибка в коде?

Фильтруются только строки (name, description), числовые значения нет (price, quantity). Почему?
class Product {
   constructor(name, price, quantity, description) {
     this.name = name;
     this.price = price;
     this.quantity = quantity;
     this.description = description;
   }
 }
 
 const products = [
   new Product("Product 1", 10, 5, "This is product 1a"),
   new Product("Product 2", 20, 6, "This is product 2c"),
   new Product("Product 3", 30, 8, "This is product 3"),
   new Product("Product 4", 40, 2, "cThis is product 4"),
 ];
 
 function filterProducts(query) {
   const parts = query.split("&");
   return products.filter((product) => {
     return parts.every((part) => {
       const [field, operator, value] = part.split("-");
       switch (operator) {
         case "contains":
           return product[field].includes(value);
         case "starts":
           return product[field].startsWith(value);
         case "ends":
           return product[field].endsWith(value);
         case "<":
           return product[field] < Number(value);
           case "=":
            return product[field] === Number(value);
         case ">":
           return product[field] > Number(value);
         case "<=":
           return product[field] <= Number(value);
         case ">=":
           return product[field] >= Number(value);
         default:
           return false;
       }
     });
   });
 }
 


 console.log(filterProducts("name-contains-4&description-starts-c"));  // 'Product 4' --  верно
 console.log(filterProducts("price->=20&quantity-=6"));  // [] -- неверно. почему?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
- console.log(filterProducts("price->=20&quantity-=6"));  // [] -- неверно. почему?
+ console.log(filterProducts("price->=-20&quantity-=-6"));  // потому что через "-" должно быть 3 части

Вообще так-себе затея минусом разделять поля. С отрицательными числами, например, будет проблема.
И плохо разделять по амперсенту query.split("&"); — если вдруг прилетит &amp; какой-нибудь.

Есть хороший современный URLSearchParams, с которым это всё удобнее:
const params = new URLSearchParams('name=contains-x&description=starts-c');
const arr = [...params.entries()]; 
// ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы