Búsqueda de sitios web

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]);
});

Artículos relacionados