fezui
Version:
FEZUI 是一套基于 Vue 的支持多终端的开源UI交互组件库,致力于积木式的快速构建项目,提升产品体验和开发效率、降低开发和维护成本。
60 lines (54 loc) • 1.74 kB
JavaScript
/* =======================================
* @ 2017 FEZUI 现代响应式的多终端UI交互组件库
* https://github.com/furic-zhao/fezui
* ======================================= */
// https://github.com/Terminux/react-csv-downloader/blob/master/src/lib/csv.js
const newLine = '\r\n';
export default function csv(columns, datas, separator = ',', noHeader = false) {
let columnOrder;
const content = [];
const column = [];
if (columns) {
columnOrder = columns.map(v => {
if (typeof v === 'string') {
return v;
}
if (!noHeader) {
column.push((typeof v.title !== 'undefined') ? v.title : v.key);
}
return v.key;
});
if (column.length > 0) {
content.push(column.join(separator));
}
} else {
columnOrder = [];
datas.forEach(v => {
if (!Array.isArray(v)) {
columnOrder = columnOrder.concat(Object.keys(v));
}
});
if (columnOrder.length > 0) {
columnOrder = columnOrder.filter((value, index, self) => self.indexOf(value) === index);
if (!noHeader) {
content.push(columnOrder.join(separator));
}
}
}
if (Array.isArray(datas)) {
datas.map(v => {
if (Array.isArray(v)) {
return v;
}
return columnOrder.map(k => {
if (typeof v[k] !== 'undefined') {
return v[k];
}
return '';
});
}).forEach(v => {
content.push(v.join(separator));
});
}
return content.join(newLine);
}