JS 中 数组转CSV保存

function downloadArrayAsCSV(array, filename) {
  // 检查输入是否为数组
  if (!Array.isArray(array)) {
    console.error('The provided data is not an array.');
    return;
  }

  // 如果数组为空,返回错误
  if (array.length === 0) {
    console.error('The array is empty.');
    return;
  }

  let headers = Object.keys(array[0]).map(header => `"${header}"`).join(',');

  const csv = [headers].concat(
    array.map(row => {
      return Object.values(row)
        .map(text => {
          // 替换字段中的双引号,并包裹在双引号中
          if (text instanceof Date) {
            return `"${text.toLocaleString()}"`;
          }
          if (typeof text === 'string') {
            return `"${text.replace(/"/g, '""')}"`;
          }
          return text;
        }).join(',');
    })
  ).join('\n');

  // 创建Blob对象
  const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });

  // 创建下载链接
  const link = document.createElement('a');
  link.href = URL.createObjectURL(blob);
  link.download = filename || 'data.csv';
  document.body.appendChild(link); // 将链接添加到页面中

  // 触发下载
  link.click();

  // 清理
  document.body.removeChild(link); // 移除链接
  URL.revokeObjectURL(link.href); // 释放URL
}

// 示例数组
const dataArray = [
  { name: 'Kimi', age: 30, city: 'Shanghai' },
  { name: 'Alice', age: 24, city: 'Beijing' }
];

// 调用函数
downloadArrayAsCSV(dataArray, 'myData.csv');

输入数组 和csv文件名即可完成

发表回复