Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

112
Views
¿Cuál es una mejor opción para muchas declaraciones if con diferentes combinaciones de filtros?
if(weekly_trending === "true" && monthly_trending === "true" && quarterly_trending === "true" && sort_by_likes === "true" && sort_by_date === "true" ){ return }

Estos son los filtros que quiero usar en mi API, pero quiero permitir usar solo uno de estos filtros a la vez, como weekly_trending === "true" , no cualquier otro de la lista.

Puedo hacerlo usando sentencias if como esta, pero tengo que escribir mucho código. ¿Hay alguna otra solución a esto?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

algo que puede hacer es crear una matriz a partir de todos sus booleanos y con array.filter obtener una matriz de todos iguales a verdadero

 var conditions = [ weekly_trending, monthly_trending, quarterly_trending, sort_by_likes, sort_by_date ]; conditions.filter(condition => condition)

array.filter es un método que:

  • iterar en el elemento de la matriz
  • debe devolver verdadero o falso para que todos acepten el paso de devolución de llamada en el parámetro
  • al final, devuelve otra matriz donde están presentes los elementos que coinciden con la condición igual a verdadero

su if se puede simplificar a

 if(conditions.filter(condition => condition).length === 1){ 

 var weekly_trending = true; var monthly_trending = false; var quarterly_trending = false; var sort_by_likes = false; var sort_by_date = false; function getConditions() { return [ weekly_trending, monthly_trending, quarterly_trending, sort_by_likes, sort_by_date ]; } function validate() { var conditions = getConditions(); if(conditions.filter(condition => condition).length === 1) { console.log('win'); } else { console.log('failed'); } } validate(); monthly_trending = true; validate();

about 4 years ago · Juan Pablo Isaza Report

0

Creo que esta solución funcionará si desea limitar solo un filtro para su API:

 const filterWeeklyTrending = (unfilteredResults) => {/*...*/} // rest of the possible filter functions... const filterFunctions = { weekly_trending: filterWeeklyTrending, monthly_trending: filterMonthlyTrending, // rest of the possible filters... } // Suppose you are using Express and queries live in `req.param` like so: // { weekly_trending: 1 } // We want to return an array of matched filter names here. const matchedFilterNames = Object.keys(filterFunctions).filter(key => key in req.param) // eg ['weekly_trending'] if (matchedFilterNames.length !== 1) { // tell client they must provide only 1 filter return } // otherwise, filter results const selectedFilterFunction = filterFunctions[matchedFilterNames[0]] const filteredResults = selectedFilterFunction(unfilteredResults)

Sin embargo, si está creando una API y el usuario final especifica el filtro, ¿un diseño ligeramente diferente que obligue al usuario final a elegir solo un filtro desde el principio mitigaría el problema?

por ejemplo, si es una API HTTP, sería mejor para el usuario proporcionar solo una opción de filtro si en lugar de http://my.site/api/sports?weekly_trending=true , tenemos http://my.site/api/sports?sort=weekly_trending ?

Entonces podemos sustituir lo siguiente:

 const matchedFilterNames = Object.keys(filterFunctions).filter(key => key in req.param) // eg ['weekly_trending'] if (matchedFilterNames.length !== 1) { // tell client they must provide only 1 filter return }

con

 const filterName = req.params.sort // if this is where user specifies the filter function if (!(filterName in filterFunctions)) { // tell client this filter does not exist return }
about 4 years ago · Juan Pablo Isaza Report

0

Cree un validador de clase auxiliar para agregar sus reglas según lo necesite y validar el resultado.

 const weekly_trending = true; const monthly_trending = true; const quarterly_trending = true; const sort_by_likes = true; const sort_by_date = true; class Validator { constructor() { this.rules = []; } addRules(...rules) { this.rules.push(...rules); } validate() { if (this.rules.every(rule => rule === true)) { console.log("all true"); } } } const validator = new Validator(); validator.addRules( weekly_trending, monthly_trending, quarterly_trending, sort_by_likes, sort_by_date ); validator.validate();

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!