¡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.