如何使用数组创建CSV文件并下载(JavaScript)

时间:2018-02-21 15:58:17

标签: javascript arrays csv export-to-csv

下面我有一个混合的当前代码,我在这里的一个单独的问题上找到但是我得到一个错误说rowArray

function downloadcsv(){
    const rows = [];

        for(var i = 0; i < vm.data.length; ++i)
        {
            rows.push(vm.data[i].value, vm.data[i].count);
        }
        console.log(rows);

        let csvContent = "data:text/csv;charset=utf-8,";

        rows.forEach(function(rowArray){

            //i get a rowArray.join is not a function error when i run this. 
           //What can i do to fix this?

            let row = rowArray.join(",");
            csvContent += row + "\r\n";
        });

        var encodedUri = encodeURI(csvContent);
        window.open(encodedUri);
    } 

我提前感谢你们。

2 个答案:

答案 0 :(得分:0)

尝试使用csv字符串中的blob创建一个blob网址,如下所示:

var csvData = new Blob([csvContent], {type: 'text/csv;charset=utf-8;'});
var csvURL = window.URL.createObjectURL(csvData);
window.open(csvURL);

所以在你的例子中它将是

&#13;
&#13;
function downloadcsv() {
  const rows = [];

  for (var i = 0; i < vm.data.length; ++i) {
    rows.push(vm.data[i].value, vm.data[i].count);
  }
  console.log(rows);

  let csvContent = "";
  rows.forEach(function(rowArray) {

    //i get a rowArray.join is not a function error when i run this. 
    //What can i do to fix this?

    let row = rowArray.join(",");
    csvContent += row + "\r\n";
  });

  var csvData = new Blob(csvContent, {type: 'text/csv;charset=utf-8;'});
  var csvURL = window.URL.createObjectURL(csvData);
  window.open(encodedUri);
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您收到错误的原因&#39; rowArray.join不是函数&#39;是因为你在一个不是数组的类型上调用它。这是因为push函数正在制作一个大型字符串数组,而不是您期望的数组数组。我已粘贴了一种修复方法:

const vmData = [
  {
    value: 'first',
    count: 12,
  },
  {
    value: 'second',
    count: 100,
  },
  {
    value: 'third',
    count: 20,
  },
  {
    value: 'fourth',
    count: 30,
  },
];


const makeCSV = (data) => {
  const rows = [];

  for (let i = 0; i < data.length; i++) {
    rows.push(`${data[i].value},${data[i].count}`);
  }

  return rows.join('\n');
};


const csv = makeCSV(vmData);

你可以使用array.map()使这更优雅,但它可以完成任务。