Как реализовать метод фильтрации товаров с указанными параметрами? - PullRequest
0 голосов
/ 07 июня 2018

Например, метод принимает в качестве аргумента объект параметров, который содержит параметры для поиска {name: "item 2", price: "<= 1000", count: "> = 2"}, каждый из параметров является необязательным,Метод должен возвращать отфильтрованный массив с товарами.filter By (опции). Обязательно, параметры от этого объекта должны быть получены через деструктуризацию.

Я реализовал этот метод таким образом, но это неправильно:

    filterProductBy(dataset, filters, options) {
        this.options = options;
        let filtredFirst = dataset.map(x => {
            for (let subObjectName in x) {
                let inner = x[subObjectName];
                return inner;
            }
        });
        let filtred = [];
        for (let prop in filtres) {
            console.log(prop);
            let filtredInst = filtredFirst.filter(x => filters[prop](x[prop]));
            console.log(filtredInst);
            filtred = filtred.concat(filtredInst);
        }
        return filtred;
    }
console.log(shop.filterProductBy({
    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);
    }
    filterProductBy(dataset, filters, options) {
        this.options = options;
        let filtredFirst = dataset.map(x => {
            for (let subObjectName in x) {
                let inner = x[subObjectName];
                return inner;
            }
        });
        let filtred = [];
        for (let prop in filtres) {
            console.log(prop);
            let filtredInst = filtredFirst.filter(x => filters[prop](x[prop]));
            console.log(filtredInst);
            filtred = filtred.concat(filtredInst);
        }
        return filtred;
    }
}

const shop = new Shop();
// create products
shop.addProduct(new Product("product 1", 1, 2000));
shop.addProduct(new Product("product 2", 1, 700));
shop.addProduct(new Product("product 3", 2, 800));
shop.addProduct(new Product("product 4", 3, 1000));
console.log(shop.filterProductBy({
    name: "product",
    count: ">=10",
    price: ">=200"
}));

1 Ответ

0 голосов
/ 07 июня 2018

На основании вашего вопроса это самое близкое, что я могу получить.Я предполагаю, что filterProductBy должен только использовать опции, и что он должен фильтровать товары, которые есть в магазине.

Похоже, что делает то, что вы просите, но в настоящее время работает толькос фильтрами> = и <= </p>

const getEvaluationFunction = filterString => filterString.indexOf('>=') > -1 ?
  (number, amount) => number >= amount :
  (number, amount) => number <= amount;


        //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);
            }
            filterProductBy({name, price, count}) {
              return this.products
                .filter(product => name === undefined || product.name === name)
                .filter(product => price === undefined ||
                    getEvaluationFunction(price)(product.price, price.match(/(\d+)/)[0])
                 )
                 .filter(product => count === undefined ||
                    getEvaluationFunction(count)(product.count, count.match(/(\d+)/)[0])
                 )
            }
        }

        const shop = new Shop();
        // create products
        shop.addProduct(new Product("product 1", 1, 2000));
        shop.addProduct(new Product("product 2", 1, 700));
        shop.addProduct(new Product("product 3", 2, 800));
        shop.addProduct(new Product("product 4", 3, 1000));
        console.log(shop.filterProductBy({
            price: ">=1000",
            count: ">=2",
        }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...