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

284
Vistas
¿Cómo comparar la matriz de formato JSON VALUE y KEY para crear una nueva matriz? en Angular 5

Aquí está mi primer formato de matriz JSON:

 this.columnNames = [ {field : "Name"}, {field : "Address"}, {field : "Age"} ];

Aquí está mi primer formato de matriz JSON:

 this.rowData = [ {Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"}, {Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"}, {Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"}, {Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"}, ];

Aquí quiero comparar el VALOR que está presente en la primera array(columnNames) y las CLAVES que están presentes en la segunda matriz. Si es igual, quiero enviar esos datos coincidentes de la segunda array(rowData) a la nueva matriz.

Y quiero mi resultado final así:

 public rowData: any =[ {Name : "Praveen",Address : "aiff",Age : "12"}, {Name : "Akashay",Address : "xvn",Age : "15"}, {Name : "Bala",Address : "hjk",Age : "16"}, {Name : "Charu",Address : "sss",Age : "17"}, ];
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tome los campos de cada objeto en su matriz columnNames usando .map() . Luego, asigne cada objeto en rowData a un nuevo objeto creado usando .reduce() , que solo incluye las claves de su matriz de fields :

 const columnNames = [ {field : "Name"}, {field : "Address"}, {field : "Age"} ]; const rowData = [ {Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"}, {Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"}, {Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"}, {Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"}, ]; const fields = columnNames.map(({field}) => field); // get array ["Name", "Address", "Age"] const result = rowData.map( // map each object in rowData to a new object o => fields.reduce((obj, k) => ({...obj, [k]: o[k]}), {}) // ^^ construct the new object, using reduce, spread syntax and computed property names ); console.log(result);
 .as-console-wrapper { max-height: 100% !important;} /* ignore */

Si puede admitir Object.fromEntries() (que toma una matriz de pares [key, value] anidados y construye un objeto a partir de ellos), entonces no hay necesidad de usar .reduce() :

 const columnNames = [ {field : "Name"}, {field : "Address"}, {field : "Age"} ]; const rowData = [ {Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"}, {Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"}, {Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"}, {Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"}, ]; const fields = columnNames.map(({field}) => field); const result = rowData.map( o => Object.fromEntries(fields.map(k => [k, o[k]])) ); console.log(result);
 .as-console-wrapper { max-height: 100% !important;} /* ignore */

over 4 years ago · Santiago Trujillo Denunciar

0

Puede filter las propiedades de su objeto en función de la matriz columnNames y luego simplemente crear un objeto usando Object.fromEntries :

 const result = rowData.map(s => Object.fromEntries( Object.entries(s).filter(([k, v]) => columnNames.some(cl => cl.field == k))));

Un ejemplo:

 let columnNames = [ {field : "Name"}, {field : "Address"}, {field : "Age"} ]; let rowData = [ {Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"}, {Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"}, {Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"}, {Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"}, ]; const result = rowData.map(s => Object.fromEntries( Object.entries(s).filter(([k, v]) => columnNames.some(cl => cl.field == k)))); console.log(result);

O una versión más depurable:

 const result = rowData.map(s => { let allProperties = Object.entries(s); let filteredProperties = allProperties.filter(([k, v]) => columnNames.some(cl => cl.field == k)); let result = Object.fromEntries(filteredProperties); return result; })

Un ejemplo:

 let columnNames = [ {field : "Name"}, {field : "Address"}, {field : "Age"} ]; let rowData = [ {Name : "Praveen",Address : "aiff",Age : "12",w : "1",e : "8"}, {Name : "Akashay",Address : "xvn",Age : "15",w : "2",e : "7"}, {Name : "Bala",Address : "hjk",Age : "16",w : "3",e : "6"}, {Name : "Charu",Address : "sss",Age : "17",w : "4",e : "5"}, ]; const result = rowData.map(s => { let allProperties = Object.entries(s); let filteredProperties = allProperties.filter(([k, v]) => columnNames.some(cl => cl.field == k)); let result = Object.fromEntries(filteredProperties); return result; })

Object.fromEntries es el método que transforma una lista de pares clave-valor en un objeto.

La siguiente fila significa que filtramos () la matriz allProperies en función de la matriz columnNames .

El método some() devuelve true si existe alguna propiedad de columnNames en allProperties :

 let filteredProperties = allProperties.filter(([k, v]) => columnNames.some(cl => cl.field == k));
over 4 years ago · Santiago Trujillo Denunciar

0

Almacene todos los nombres de campo en keys variables usando .map . Luego recorra la matriz original y cree un objeto que tenga las propiedades presentes en keys

Prueba así:

 let keys = this.columnNames.map(x => x.field); this.rowData.forEach(item => { let obj = {} keys.forEach(key => { obj[key] = item[key] }); this.result.push(obj) });

Demostración de trabajo

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