javascript - Comparar arrays json y obtener un resultado en un array simple
Tengo dos JSON y tengo que crear un arreglo a partir de ellos
Array1: [{ label: "ENCABEZADO" value:"header" }, { label: "PIE DE PÁGINA" value:"footer" }]
Array2: [ { encabezado: "Encabezado 1", pie: "Pie 1" }, { encabezado: "Encabezado 2", pie: "Pie 2" }]
Array esperado (La etiqueta de Array1 será el criterio de búsqueda de las Claves de Array2: [["Encabezado 1","Encabezado 2"],["Pie de página 1","Pie de página 2"]]
Respuesta #1
Podrías usar Array.map() en Array1, luego para cada valor en este array, ejecutar .map() nuevamente, devolviendo todos los elementos coincidentes en Array2.
Usaríamos Array.find() y String.includes() para hacer esto.
const Array1 = [ { label: "HEADER", value:"header" }, { label: "FOOTER", value:"footer" } ]
const Array2 = [ { header: "Header 1", footer: "Footer 1" }, { header: "Header 2", footer: "Footer 2" } ]
const result = Array1.map(({ label, value}) => {
return Array2.map((obj) => {
let key = Object.keys(obj).find(key => key.includes(value));
return key ? obj[key]: null;
})
})
console.log('Result:', result);
.as-console-wrapper { max-height: 100% !important; top: 0; }Otro ejemplo, esta vez Array2 tiene una entrada sin la propiedad footer (como se solicitó):
const Array1 = [ { label: "HEADER", value:"header" }, { label: "FOOTER", value:"footer" } ]
const Array2 = [ { header: "Header 1", footer: "Footer 1" }, { header: "Header 2" }]
const result = Array1.map(({ label, value}) => {
return Array2.map((obj) => {
let key = Object.keys(obj).find(key => key.includes(value));
return key ? obj[key]: null;
})
})
console.log('Result:', result);
.as-console-wrapper { max-height: 100% !important; top: 0; }Respuesta #2
Estoy dando por sentado que los valores de array1 solo pueden contener 'header' | 'footer' y que cada elemento de array2 tiene una propiedad header y una propiedad footer ya que no se especifica. Así que sería:
const array1 = JSON.parse(/* JSON1 file content */);
const array2 = JSON.parse(/* JSON2 file content */);
const result = array1.map(item1 => {
const criteria = item1.label.toLowerCase();
return array2.map(item2 => item2[criteria]);
});
