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"}, ];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 */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));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) });