[英]Convert array of objects to array of arrays of strings
假設我具有以下結構:
var obj = [{one: 1, two: 2, three: 3}, {one: 1, two: 2, three: 3}];
但是我需要使用以下輸出將此數據導出到csv:
"1", "2", "3"
"1", "2", "3"
我已經嘗試了以下代碼,但無法正常工作:
var csvContent = "data:text/csv;charset=utf-8,";
Object.values = function (obj) {
var vals = [];
for( var key in obj ) {
if ( obj.hasOwnProperty(key) ) {
vals.push(obj[key]);
}
}
return vals;
}
Object.values(obj).forEach(function(infoArray, index) {
dataString = infoArray.join(",");
csvContent += index < obj.length ? dataString + "\n" : dataString;
});
var encodedUri = encodeURI(prepearedString);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
您能幫我解決這個問題嗎?
看起來好像要將對象轉換為CSV文件。 重要的是要注意,對象基本上是哈希映射,這意味着不能以可預測的順序訪問鍵 。 另外,您的某些行可能缺少值,這將導致結果數據出現漏洞。
我要做的是首先將所有行都轉換為列(並且在缺少null
地方默認為null
),以便可以預期地訪問所有已知列的值。 然后,您可以輸出包含所有已知標題的CSV標題,后跟值。
這是一個例子:
var rows = [{one: 1, two: 2, three: 3}, {one: 1, two: 2, three: 3}];
var columns = {};
rows.forEach(function (row, index) {
for (var key in row) {
if (!columns[key]) {
// Set up nullified column.
var values = [];
for (var i = 0; i < rows.length; i++) {
values.push(null);
}
columns[key] = values;
}
// Store the value in the column.
columns[key][index] = row[key];
}
});
// Print the header.
var header = Object.keys(columns);
console.log(header.join(','));
// Print the rows.
for (var i = 0; i < rows.length; i++) {
var values = header.map(function (key) { return columns[key][i]; });
console.log(values.join(','));
}
這是您從上面的代碼在控制台中獲得的輸出:
one,two,three
1,2,3
1,2,3
下面是提取值並對其進行多行處理的代碼,可以管理CSV格式。
var obj = [{one: 1, two: 2, three: 3}, {one: 1, two: 2, three: 3}]; var output = []; for( var key in obj ) { for( var k in obj[key]){ output.push(obj[key][k]) } output.push('\\n') } alert(output.join(''))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.