Mostrando entradas con la etiqueta JSON. Mostrar todas las entradas
Mostrando entradas con la etiqueta JSON. Mostrar todas las entradas

martes, 27 de junio de 2023

Manipulación de JSON en JavaScript: Transposición de Datos

¡Hola a todos! Estamos de vuelta con un nuevo artículo sobre JavaScript. Esta vez, exploraremos un tema fundamental pero a menudo repetitivo: cómo trabajar con JSON. Vamos a sumergirnos directamente en el código, donde mostraremos cómo transponer valores de filas a columnas en un arreglo JSON.


¿Qué es la Transposición de Datos?

La transposición de datos implica cambiar la orientación de los datos, es decir, convertir filas en columnas y viceversa. En este artículo, te mostraré cómo hacerlo usando JavaScript.


La Función transpuesta

La función transpuesta se encarga de transponer los valores de un objeto JSON. A continuación, se explica cómo funciona esta función paso a paso:


Código de la Función

/**
 * Función transpuesta: Transpone valores de filas a columnas en un arreglo JSON.
 * @param {Object} obj - El objeto JSON que contiene los datos a transponer.
 * @returns {Array} - El nuevo arreglo con los valores transpuestos.
 */
function transpuesta(obj) {
    var rtn = [];
    var key = {};
    var x = 0;

    // Función de comparación de objetos
    var c = function(a, b) {
        return JSON.stringify(a) === JSON.stringify(b);
    };

    // Recorre el arreglo o JSON que recibe
    $.each(obj.arr, function(i, v) {
        var nObj = {};
        var keys = Object.keys(v);
        
        // Crea un objeto sin las llaves y valores a transponer
        for (var j = 0; j < keys.length; j++) {
            if (keys[j] !== obj.field.structure.value && keys[j] !== obj.value) {
                nObj[keys[j]] = v[keys[j]];
            }
        }

        var rn = -1;

        // Evalúa si la llave ya tiene un objeto asociado
        if (Object.keys(key).length == 0) {
            key['a_' + x] = { k: nObj, r: rtn.length };
            x++;
        } else {
            var existe = false;
            for (var y = 0; y < x; y++) {
                if (c(key['a_' + y].k, nObj)) {
                    existe = true;
                    rn = key['a_' + y].r;
                }
            }

            if (!existe) {
                key['a_' + x] = { k: nObj, r: rtn.length };
                x++;
            }
        }

        var tmpObj = {};
        $.extend(tmpObj, nObj);

        var k = obj.field.structure;
        var prp = k.prepend + (v[k.value] + "").replace(k.rp[0] || '', k.rp[1] || '') + k.append;

        if (rn == -1) {
            tmpObj[prp] = v[obj.value];
            rtn.push(tmpObj);
        } else {
            rtn[rn][prp] = v[obj.value];
        }
    });

    return rtn;
}

Ejemplo de Uso

Vamos a ver un ejemplo práctico de cómo usar esta función.


JSON de Entrada

var jsn = [
    {folio: 4401685, fecha: '20/07/2022', orden: 352673, identificador: 44156245, pieza: 312, equivalencia: 'XY-A1'},
    {folio: 4401685, fecha: '20/07/2022', orden: 352673, identificador: 44156245, pieza: 504, equivalencia: 'XY-A3'},
    {folio: 4401685, fecha: '20/07/2022', orden: 352673, identificador: 44156245, pieza: 312, equivalencia: 'XY-A4'},
    {folio: 4401685, fecha: '20/07/2022', orden: 352673, identificador: 44156245, pieza: 1272, equivalencia: 'XY-A6'},
    {folio: 4401685, fecha: '20/07/2022', orden: 352673, identificador: 44156245, pieza: 960, equivalencia: 'XY-A7'},
    {folio: 4401685, fecha: '20/07/2022', orden: 352673, identificador: 44156245, pieza: 624, equivalencia: 'XY-A8'}
];

Invocación de la Función

var jsonRtn = transpuesta({
    arr: jsn,
    field: {
        structure: {
            prepend: 'E_',
            value: 'equivalencia',
            rp: ['-', '_'],
            append: '_PZ'
        }
    },
    value: 'pieza'
});

Resultado

La función transpuesta transformará los datos de la siguiente manera:

console.log(jsonRtn);
/*
[
    {
        folio: 4401685,
        fecha: '20/07/2022',
        orden: 352673,
        identificador: 44156245,
        E_XY_A1_PZ: 312,
        E_XY_A3_PZ: 504,
        E_XY_A4_PZ: 312,
        E_XY_A6_PZ: 1272,
        E_XY_A7_PZ: 960,
        E_XY_A8_PZ: 624
    }
]
*/

Conclusión

En este artículo, hemos aprendido a transponer valores en un arreglo JSON usando JavaScript. Esta técnica es útil para reorganizar datos y hacerlos más manejables para diferentes propósitos.


Si este artículo te ha sido útil, por favor, deja tu comentario y comparte tu experiencia. Gracias por leernos y hasta la próxima.