tengo un mapa:
const map = new Map()En este mapa tengo los valores:
{ 'contract' => [ 'MetaCoin.sol', 'MetaCoin.sol', 'MetaCoin.sol', 'MetaCoin.sol' ], 'hash' => [ '1bb0ff1c', '330f7461', '07c815a6', '8166ca06' ], 'operator' => [ 'AOR', 'AOR', 'AOR', 'AOR' ], 'TestMetaCoin' => [ 'L', 'L', 'L', 'L' ], 'Contract: MetaCoin' => [ 'K', 'K', 'K', 'L' ] }Necesito escribir este mapa en un archivo CSV que contenga mis claves como un nombre de columna y los valores asociados con los títulos de columna en la columna debajo de ellos de esta manera:
¿Cómo puedo escribir mi archivo CSV?
Puede crear una cadena de archivo csv y usar fs para escribir en un archivo como este;
Primero recorriendo todas las claves para crear el encabezado
var myStr = "" // Creating header for(let key of map.keys()){ myStr += key+"," } myStr = myStr.slice(0,-1)+"\r\n"; Obtener la primera matriz usando map.values()
const [firstValue] = map.values();Ahora recorre todas las claves y obtiene un elemento particular de todas las matrices y crea una fila para un archivo csv
// Creating each row for(let i = 0; i<firstValue.length; i++){ var row = "" for(let key of map.keys()){ if(map.get(key)[i]){ row += map.get(key)[i]+"," }else{ row += "," } } myStr += row.slice(0, -1)+"\r\n"; }Guardando la cadena en el archivo csv
fs.writeFileSync('./mycsv.csv',myStr);La convención habitual es que la primera línea contiene los nombres/títulos de las columnas, y las líneas restantes son los datos.
Para lograr eso (asumiendo que sus datos están contenidos en un Map o WeakMap ), puede hacer algo como esto:
function toCSV( map = new Map() ) { const header = Array.from( map.keys() ) .join(",") ; const records = Array.from( map.values() ) .map( arr => arr.join(",") ) ; const csv = [ headers, ...records, ].join("\n"); return csv; }