Фильтрация объектов с помощью строки запроса Javascript - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть объект со списком продуктов, и я хочу отфильтровать его, используя метод GET с предоставленной строкой запроса.

Мне нужно создать маршрут к продуктам "/ products", и я необходимо получить список объектов, отфильтрованных по «максимальной» цене, которая указана в строке запроса. Например, если указан URL-адрес «/ products / max = 2000», я хочу получить список продуктов, стоимость которых не превышает этот набор max.

Я безуспешно пытался что-то подобное :

const express = require('express');
const router = express.Router();

const products = [
    {
        nome: 'Motorola Moto E6 Plus',
        preco: 14999
    },
    {
        nome: 'Motorola Moto G7',
        preco: 19999
    },
    {
        nome: 'Alcatel 5033A',
        preco: 6999
    },
    {
        nome: 'Samsung Galaxy A50',
        preco: 33499
    }
];

const filterPrice = {
    viewCelular: (req, res)=>{
        let {celular, preco} = req.query;

        res.send(products)
    }
}

router.get('/products', (req, res) => { 

    res.send(req.query.filterPrice)
    })

Ответы [ 3 ]

0 голосов
/ 13 апреля 2020

Вы можете использовать параметры URL, такие как router.get('/products/:max'), и вы должны отправить "/ procucts / 2000", чтобы получить результаты, тогда вам просто нужно использовать метод фильтрации в обратном вызове:

let filterArr = products.filter( product => { return product.preco <= req.params.max })

и теперь filterArr - это нужный вам массив, и он готов к использованию. Вы также можете использовать метод сортировки, если хотите отсортировать этот массив и сделать его более эффективным:

filterArr.sort((a,b)=>{
   return a.preco - b.preco;
});
0 голосов
/ 13 апреля 2020

В вашем коде вам нужно передать req, res в filterPrice функцию и удалить max из req.query, применить фильтр и затем отправить ответ. Ваш URL будет выглядеть как http://localhost:3000/products?max=2000.
Вот пример:

var express = require('express');
var app = express(); 
const products = [
  {
    nome: 'Motorola Moto E6 Plus',
    preco: 14999
  },
  {
    nome: 'Motorola Moto G7',
    preco: 19999
  },
  {
    nome: 'Alcatel 5033A',
    preco: 6999
  },
  {
    nome: 'Samsung Galaxy A50',
    preco: 33499
  },
  {
    nome: 'Smartwatch',
    preco: 1700
  }
];
const filterPrice = {
  viewCelular: (req, res) => {
    let { celular, preco, max } = req.query;

    res.send(products.filter(e => e.preco <= max))
  }
}
app.get('/products/', (req, res) => {
  filterPrice.viewCelular(req, res)
})
var port = process.env.PORT || 3000
app.listen(port);
console.log('I am ready and listening on %d', port);
0 голосов
/ 13 апреля 2020

эта функция возвращает список, отфильтрованный с макс.

function maxfilter(max){
  return products.filter(x=>x.preco<=max);
}

и вызывает его в свой filterPrice

 const filterPrice = {
        viewCelular: (req, res)=>{
            let {celular, preco, max} = req.query;

            res.send(maxfilter(max))
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...