Estaba tratando de hacer que los datos que tengo conmigo tengan un formato mucho más legible y fácilmente comprensible. Pero estaba atascado con eso. ¿Es posible convertirlo a un formato legible?
Los datos que tengo están en el siguiente formato
[ { "c": [ { "v": "Food Truck: The Vegan" }, { "v": "06/02/2022 16:00:00" }, { "v": "06/02/2022 21:00:00" }, { "v": "06/02/2022" } ] }, { "c": [ { "v": "Food Truck: Lob Dogs" }, { "v": "06/03/2022 16:00:00" }, { "v": "06/03/2022 21:00:00" }, { "v": "06/03/2022" } ] }}]Quiero convertirlo a un formato mucho más legible como el ejemplo que se muestra a continuación.
{ "name": "Food Truck: The Vegan Table", "start_date": "06/02/2022 16:00:00", "end_date": "06/02/2022 21:00:00", "date": "06/02/2022" }, { "name": "Food Truck: Lob Dogs", "start_date": "06/03/2022 16:00:", "end_date": "06/03/2022 21:00:00", "date": "06/03/2022" } ] How should I do this in javascript?Puede usar Object.fromEntries con una matriz de keys separada para mapear su matriz y reformatear cada matriz anidada.
const input = [{ "c": [{ "v": "Food Truck: The Vegan" }, { "v": "06/02/2022 16:00:00" }, { "v": "06/02/2022 21:00:00" }, { "v": "06/02/2022" }] }, { "c": [{ "v": "Food Truck: Lob Dogs" }, { "v": "06/03/2022 16:00:00" }, { "v": "06/03/2022 21:00:00" }, { "v": "06/03/2022" }] }] const keys = ['name', 'start_date', 'end_date', 'date']; const result = input.map(({ c }) => Object.fromEntries( keys.map((key, i) => [key, c[i].v]) )); console.log(result)O usando un poco de desestructuración de largo aliento. (posiblemente el más descriptivo...)
const input = [{ "c": [{ "v": "Food Truck: The Vegan" }, { "v": "06/02/2022 16:00:00" }, { "v": "06/02/2022 21:00:00" }, { "v": "06/02/2022" }] }, { "c": [{ "v": "Food Truck: Lob Dogs" }, { "v": "06/03/2022 16:00:00" }, { "v": "06/03/2022 21:00:00" }, { "v": "06/03/2022" }] }] const result = input.map(( { c: [ { v: name }, { v: start_date }, { v: end_date }, { v: date } ] } ) => ( { name, start_date, end_date, date } )); console.log(result)Solo necesita iterar sobre los datos sin procesar y reestructurarlos de la manera que desee. Dado que no existen claves adecuadas para los datos sin procesar, si el orden o el índice es siempre el mismo, puede hacerlo de la siguiente manera.
var data = [{ "c": [{ "v": "Food Truck: The Vegan" }, { "v": "06/02/2022 16:00:00" }, { "v": "06/02/2022 21:00:00" }, { "v": "06/02/2022" } ] }, { "c": [{ "v": "Food Truck: Lob Dogs" }, { "v": "06/03/2022 16:00:00" }, { "v": "06/03/2022 21:00:00" }, { "v": "06/03/2022" } ] } ]; function processData(_raw) { var processed = []; _raw.forEach(_item => { processed.push({ "name": _item.c[0].v, "start_date": _item.c[1].v, "end_date": _item.c[2].v, "date": _item.c[3].v }); }); return processed; } console.log(processData(data));Use un método de reduce ( format en el fragmento) para map los elementos de su matriz:
const keys = `name,start_date,end_date,date`.split(`,`); const format = (acc, obj, i) => ( {...acc, [keys[i]]: obj.v} ); const dataFormatted = getData().map( v => vcreduce(format, {}) ); console.log(dataFormatted); function getData() { return [ { "c": [ { "v": "Food Truck: The Vegan" }, { "v": "06/02/2022 16:00:00" }, { "v": "06/02/2022 21:00:00" }, { "v": "06/02/2022" } ] }, { "c": [ { "v": "Food Truck: Lob Dogs" }, { "v": "06/03/2022 16:00:00" }, { "v": "06/03/2022 21:00:00" }, { "v": "06/03/2022" } ] } ]; } .as-console-wrapper { max-height: 100% !important; }