我有一个像这样的对象myObject
0:
timestamp: 1525879470
name: "testing"
lastname: "testingdone"
1:
timestamp: 1525879470
name: "testing2"
lastname: "testingdone2"
我正在寻找一种将它转换为csv的方法,就像这样
timestamp,name,lastname
1525879470,testing,testingdone
1525879470,testing2,testingdone2
好消息是我可以提取标题
var headers = Object.keys(myObject.reduce(function (result, obj) {
return Object.assign(result, obj);
}, {}));
header var会给我一个像
这样的标题数组 Array(3): timestamp, name, lastname
我只是想从像对象的数组中提取对象的值,然后最终将其转换为CSV,如上所述。我尝试使用数组映射但由于某种原因我无法弄清楚
答案 0 :(得分:4)
如果那是对象数组,你可以先获取标题,然后输入值并从中创建字符串。
const data = [ {timestamp: 1525879470,name: "testing",lastname: "testingdone"
}, {timestamp: 1525879470,name: "testing2",lastname: "testingdone2"}]
let csv = '';
let header = Object.keys(data[0]).join(',');
let values = data.map(o => Object.values(o).join(',')).join('\n');
csv += header + '\n' + values;
console.log(csv)

答案 1 :(得分:0)
如果那个东西(myObject
)是一个JavaScript对象,你可以使用解构在数组块中序列化它,然后使用Array#reduce
将它们连接成一个字符串:
const data = {
'0': {
timestamp: 1525879470,
name: "testing",
lastname: "testingdone"
},
'1': {
timestamp: 1525879470,
name: "testing2",
lastname: "testingdone2"
}
};
const result = [
// headers
Object.keys(data['0']),
// values
...Object.values(data).map(item => Object.values(item))
]
.reduce((string, item) => {
string += item.join(',') + '\n';
return string;
}, '');
console.log(result);

答案 2 :(得分:0)
在为CSV编写自己的代码时要小心,存在很多边缘情况,而不仅仅是将项目与逗号和换行符组合在一起(如果数据中包含逗号,该如何插入BOM来确保非ASCII输入的文本是否可以在任何电子表格软件中正确显示?)。
以下是一些有效的示例代码:
const ObjectsToCsv = require('objects-to-csv');
// Sample data - two columns, three rows:
const data = [
{code: 'HK', name: 'Hong Kong'},
{code: 'KLN', name: 'Kowloon'},
{code: 'NT', name: 'New Territories'},
];
// If you use "await", code must be inside an asynchronous function:
(async () => {
const csv = new ObjectsToCsv(data);
// Save to file:
await csv.toDisk('./test.csv');
// Return the CSV file as string:
console.log(await csv.toString());
})();