繁体   English   中英

将对象数组转换为字符串数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM