javascript - (Javascript) 当属性不存在时,如何使用 csv 中的标题和空字符串将对象属性获取到 csv?

标签 javascript csv

我有一个对象数组。其中一些对象具有共享属性,但并非每个对象都具有所有属性,并且各个对象的属性顺序可能不同。考虑以下因素:

var arr = [{ foo: 1, bar: 2}, { foo: 3, thing: 4}, {thing: 5, bar: 6}]

我需要将此数组转换为 CSV,以便第一行是包含所有属性名称的标题,如果该属性存在于对象中,则将填充该属性,否则为空字符串。顺序不一定重要,只要每行中每个项目的顺序与标题的顺序一致即可。

期望的输出:

foo,bar,thing
1,2,
3,,4
,6,5

最佳答案

function getCsvLines(input) {

    var CSV_SEPARATOR = ',';

    var headers = getHeaders(input);

    var lines = getLines(input, headers);

    return [headers.join(CSV_SEPARATOR)].concat(lines);

    function getHeaders(input) {

        var headers = new Set();

        input.forEach(function (obj) {
            Object.keys(obj).forEach(function (key) {
                headers.add(key);
            });
        });

        return Array.from(headers);
    }

    function getLines(input, headers) {

        var lines = [];

        input.forEach(function (obj) {
            var line = [];
            headers.forEach(function (head) {
                line.push(obj[head] || '');
            });
            lines.push(line);
        });

        return lines.map(function(line) {
            return line.join(CSV_SEPARATOR);
        });
    }
}

getCsvLines(arr); // -> ["foo,bar,thing", "1,2,", "3,,4", ",6,5"]

getCsvLines 函数返回用于导出的 csv 行数组。

要更改值的顺序,只需在将 headers 数组传递给 getLines 之前重新排序即可。

关于javascript - (Javascript) 当属性不存在时,如何使用 csv 中的标题和空字符串将对象属性获取到 csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46738727/

相关文章:

javascript - JSON 到 JQuery : What am I doing wrong?

php - 数据库值与数据流不匹配

csv - 将 CSV 导入表格需要太长时间

postgresql - 使用带有自定义分隔符的 postgres 按字符大小复制文本文件

javascript - 使用 gettext 翻译 .js 文件

javascript - 简单的 Jquery CheckAll/UncheckAll 复选框

javascript - 有没有办法判断图像 src 在 javascript 中是否返回 null?

javascript - 使用 ES6,导入 tinymce 作为 npm 包

python - 正则表达式查找文本文件中字符串的所有出现位置。如何?

c# - 你能从这两种方法中重构出一个共同的功能吗?