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

97
Vistas
matrices de relleno de objetos

tengo dos matrices.

 const department = [ { id: '1', name: 'department1' }, { id: '2', name: 'department2' }, ]; const models = [ { id: '23', name: 'model1', departments: [{ id: '1', name: 'department1' }], }, { id: '54', name: 'model2', departments: [ { id: '1', name: 'department1' }, { id: '2', name: 'department2' }, ], }, ];

necesito renderizar acordeones con nombres de departamento y detalles de acordeón con nombres de modelos coincidentes. Mi pregunta es cómo filtrar esas matrices para obtener modelos.

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

0

Podemos map a través de la matriz de departamentos y agregar una propiedad de models que sea igual a la matriz de models , pero filtrada solo a los que contienen una identificación de departamento coincidente.

 const departments = [ { id: "1", name: "department1" }, { id: "2", name: "department2" }, ]; const models = [ { id: "23", name: "model1", departments: [{ id: "1", name: "department1" }], }, { id: "54", name: "model2", departments: [ { id: "1", name: "department1" }, { id: "2", name: "department2" }, ], }, ]; const getDepartmentsWithModels = () => { return departments.map((department) => { return { ...department, models: models.filter((model) => { const modelDepartmentIds = model.departments.map(({ id }) => id); return modelDepartmentIds.includes(department.id); }), }; }); }; console.log(getDepartmentsWithModels()); // [ { id: '1', name: 'department1', models: [ [Object], [Object] ] }, // { id: '2', name: 'department2', models: [ [Object] ] } ]```
about 4 years ago · Juan Pablo Isaza Denunciar

0

Hay dos soluciones.

Usando Array.reduce() --> devuelve un objeto donde la clave es el nombre del departamento y el valor es una matriz de los nombres de los modelos coincidentes:

 let data1 = models.reduce((res, curr) => { curr.departments.forEach(dep => { if (!res[dep.name]) { res[dep.name] = [curr.name] } else { if (!res[dep.name].includes(curr.name)) { res[dep.name].push(curr.name); } } }) return res; }, {});

Usar mapa y filtro --> devuelve una matriz de tipo: [{departamento: [nombres de los modelos]},...]

 let data2 = department.map(dep => { let matchingModels = models.filter(model => { return model.departments.filter(modDep => { return modDep.name === dep.name; }).length > 0; }).map(mod => { return mod.name; }); return { department: dep.name, models: matchingModels } });
about 4 years ago · Juan Pablo Isaza Denunciar

0

He creado un código, que itera sobre los departamentos. Para cada departamento itera los modelos y para cada modelo verifica si el departamento está dentro de los departamentos modelo.

 const department = [ { id: '1', name: 'department1' }, { id: '2', name: 'department2' } ] const models = [ { id: '23', name: 'model1', departments: [{ id: '1', name: 'department1' }] }, { id: '54', name: 'model2', departments: [{ id: '1', name: 'department1' },{ id: '2', name: 'department2' }] } ] department.forEach( dep => { console.log(`Department: ${dep.name}`) models.forEach(model => { if (model.departments.find(modelDep => dep.id===modelDep.id)) { console.log(` Model: ${model.name}`) } }) })

Si pudiera cambiar sus objetos de datos, entonces su código podría ser mucho más fluido.

Cambié ligeramente sus objetos de datos simplemente reduciendo los departamentos en un modelo para que sea una matriz de ID de departamento. Este código itera sobre los departamentos. Para cada departamento, filtra los modelos e itera sobre los modelos filtrados para enviarlos a la consola. Este es un código menor y proporciona un rendimiento mucho mejor.

 const department = [ { id: '1', name: 'department1' }, { id: '2', name: 'department2' } ] const models = [ { id: '23', name: 'model1', departments: ['1'] }, { id: '54', name: 'model2', departments: ['1', '2'] } ] department.forEach( dep => { console.log(`Department: ${dep.name}`) models.filter(model => model.departments.includes(dep.id)).forEach(model => { console.log(` Model: ${model.name}`) }) })
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