Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

231
Vistas
ES6: elimine el objeto de la matriz según las condiciones y devuelva el resto de la matriz

Hay tres indicadores xstatus, ystatus y zstatus que determinan si el objeto con las propiedades name.is_xstatus, name.is_ystatus y name.is_zstatus debe estar presente en la matriz o no.

 //All flags are true var xstatus = true; var ystatus = true; var zstatus = true; var myArray = [ {field: 'id', name:'is_xstatus', operator: 'eq', value: 'id'}, {field: 'cStatus', name:'is_ystatus', operator: 'eq', value: 'cStatus'}, {field: 'money', name:'is_zstatus', operator: 'eq', value: 'money'}, {field: 'coverage', name:'is_coverage', operator: 'eq', value: 'coverage'}, {field: 'nam', name:'is_nam', operator: 'eq', value: 'nam'} ]; 

 var xstatus = true; var ystatus = true; var zstatus = true; var myArray = [ {field: 'id', name:'is_xstatus', operator: 'eq', value: 'id'}, {field: 'cStatus', name:'is_ystatus', operator: 'eq', value: 'cStatus'}, {field: 'money', name:'is_zstatus', operator: 'eq', value: 'money'}, {field: 'coverage', name:'is_coverage', operator: 'eq', value: 'coverage'}, {field: 'nam', name:'is_nam', operator: 'eq', value: 'nam'} ]; myArray = myArray.filter(( obj ) =>(!zstatus && obj.name !== 'is_zstatus')).filter((obj) => (!ystatus && obj.name !== 'is_ystatus')) console.log(myArray);

Intenté lo anterior con el método de filtro. Cuando las condiciones del filtro no se cumplen, devuelve vacío []. Pero lo que necesito es que si no se cumplen las condiciones, devuelva el Array sin eliminar ningún objeto.

 var xstatus = true; var ystatus = true; var zstatus = false; var myArray = [ {field: 'id', name:'is_xstatus', operator: 'eq', value: 'id'}, {field: 'cStatus', name:'is_ystatus', operator: 'eq', value: 'cStatus'}, {field: 'money', name:'is_zstatus', operator: 'eq', value: 'money'}, {field: 'coverage', name:'is_coverage', operator: 'eq', value: 'coverage'}, {field: 'nam', name:'is_nam', operator: 'eq', value: 'nam'} ]; myArray.forEach((obj, index) => { if(!zstatus && obj.name == 'is_zstatus') { delete myArray[index]; } return myArray; }); console.log(myArray);

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

No puede hacer esto con llamadas encadenadas para filtrar. El filtro zstatus eliminará todos los elementos con is_xtatus e is_ystatus , por lo que no estarán disponibles para esos filtros.

En su lugar, use una sola llamada a filter() que pruebe todas las condiciones usando || .

 var xstatus = true; var ystatus = true; var zstatus = true; var myArray = [ {field: 'id', name:'is_xstatus', operator: 'eq', value: 'id'}, {field: 'cStatus', name:'is_ystatus', operator: 'eq', value: 'cStatus'}, {field: 'money', name:'is_zstatus', operator: 'eq', value: 'money'}, {field: 'coverage', name:'is_coverage', operator: 'eq', value: 'coverage'}, {field: 'nam', name:'is_nam', operator: 'eq', value: 'nam'} ]; myArray = myArray.filter((obj) => (zstatus && obj.name == 'is_zstatus') || (ystatus && obj.name == 'is_ystatus') || (xstatus && obj.name == 'is_xtatus') || (obj.name !== 'is_ystatus' && obj.name !== 'is_xstatus' && obj.name !== 'is_zstatus')); console.log(myArray);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Otro enfoque con el uso del operador de propagación

 var xstatus = false; var ystatus = true; var zstatus = true; var myArray = [ {field: 'id', name:'is_xstatus', operator: 'eq', value: 'id'}, {field: 'cStatus', name:'is_ystatus', operator: 'eq', value: 'cStatus'}, {field: 'money', name:'is_zstatus', operator: 'eq', value: 'money'}, {field: 'coverage', name:'is_coverage', operator: 'eq', value: 'coverage'}, {field: 'nam', name:'is_nam', operator: 'eq', value: 'nam'} ]; let arr1 = myArray.filter(( obj ) =>(zstatus && obj.name == 'is_zstatus')); let arr2 = myArray.filter(( obj ) =>(xstatus && obj.name == 'is_xstatus')); let arr3 = myArray.filter(( obj ) =>(ystatus && obj.name == 'is_ystatus')); let remainingElements = myArray.filter((obj) => (obj.name !== 'is_ystatus' && obj.name !== 'is_xstatus' && obj.name !== 'is_zstatus')); myArray = [ ...arr1, ...arr2, ...arr3, ...remainingElements]; console.log(myArray);

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Por qué no agregar un juicio después del filtro?

 let temp = myArray.filter(( obj ) =>(!zstatus && obj.name !== 'is_zstatus')).filter((obj) => (!ystatus && obj.name !== 'is_ystatus')); myArray = temp.length ? temp : myArray;
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda