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

118
Views
Filtrado por varios parámetros a la vez

Necesito implementar el filtrado de usuarios de acuerdo con las reglas que vienen con el archivo JSON junto con los usuarios. Hay dos tipos de reglas: "excluir" e "incluir". Pueden venir individualmente o dos a la vez. En este momento, mi código funciona bien cuando entran dos reglas a la vez. Pero cuando solo hay una regla, el error en la consola es No se pueden leer las propiedades de undefined (leyendo 'forEach'). ¿Cómo se puede resolver este problema?

Usuarios y reglas:

 { "data": [{ "user": "user1", "city": "New York", "disabled": false }, { "user": "user2", "city": "London", "disabled": false }, { "user": "user3", "city": "Tokyo", "disabled": true } ], "condition": { "exclude": [{ "disabled": true }], "include": [{ "city": "New York", }], } }

 const data = responseJson.then((data) => { var filteredUsers = advancedFilter(data.data, data.condition); console.log(filteredUsers); }); function advancedFilter(data, condition) { return data.filter((dataItem) => { var cond = true; if ("exclude" in condition || "include" in condition) { condition.exclude.forEach((condItem) => { for (var key in condItem) { cond = cond && dataItem[key] !== condItem[key]; } }); condition.include.forEach((condItem) => { for (var key in condItem) { cond = cond && dataItem[key] === condItem[key]; } }); } return cond; }); }

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Solo necesita hacer dos condiciones if por separado, por lo que si hay una condición de exclude , ejecute forEach en la exclusión. Además, si hay una condición de include , ejecute forEach en la inclusión.

El error ocurre porque realiza un bucle para include y exclude incluso si uno de ellos no existe.

 const responseJson = { "data": [{ "user": "user1", "city": "New York", "disabled": false }, { "user": "user2", "city": "London", "disabled": false }, { "user": "user3", "city": "Tokyo", "disabled": true } ], "condition": { "exclude": [{ "disabled": true }], "include": [{ "city": "New York", }], } } var filteredUsers = advancedFilter(responseJson.data, responseJson.condition); console.log(filteredUsers); function advancedFilter(data, condition) { return data.filter((dataItem) => { var cond = true; if ("exclude" in condition) { condition.exclude.forEach((condItem) => { for (var key in condItem) { cond = cond && dataItem[key] !== condItem[key]; } }); } if ("include" in condition) { condition.include.forEach((condItem) => { for (var key in condItem) { cond = cond && dataItem[key] === condItem[key]; } }); } return cond; }); }

about 4 years ago · Santiago Trujillo Report

0

Recomendaría dividir la lógica en dos declaraciones if, así:

 if ("exclude" in condition) { condition.exclude.forEach((condItem) => { for (var key in condItem) { cond = cond && dataItem[key] !== condItem[key]; } }); } if ("include" in condition) { condition.include.forEach((condItem) => { for (var key in condItem) { cond = cond && dataItem[key] === condItem[key]; } }); }

De esta manera, no intentará leer algo indefinido, ya que habrá verificado que la propiedad está presente.

about 4 years ago · Santiago Trujillo 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!