function csvify(data, defaultValue, padBack) { var maxColumnLength = 0, columnNames = Object.keys(data), transformed = [], columnName; for(columnName in data) { if(data[columnName].length > maxColumnLength) { maxColumnLength = data[columnName].length; } } transformed.push(columnNames.join(", ")); for(var i = 0; i < maxColumnLength; i++) { var temp = [] for(var j = 0; j < columnNames.length; j++) { var columnName = columnNames[j]; if(data[columnName].length < maxColumnLength) { // column is not the same size as the max. if(!padBack) { // array padding at the front if( i < (maxColumnLength - data[columnName].length)) { temp.push(defaultValue); } else { temp.push(data[columnName][data[columnName].length - maxColumnLength + i]); } } else { // array padding at the back if( i >= data[columnName].length) { temp.push(defaultValue); } else { temp.push(data[columnName][i]); } } } else { temp.push(data[columnName][i]); } } transformed.push(temp.join(", ")); } return transformed.join("\r\n"); } var data = { w: [1], x: [1,2,3,4,5], y: [6,7,8,9,0], z: [1,2,3] }; var transformed = csvify(data, 0, true); var blob = new Blob([transformed], {type: "text/csv"}); var url = window.URL.createObjectURL(blob); $("#test").attr("href", url); $("#test").attr("download", "spreadsheet.csv");
<a id="test" href="#">Download</a>