我有一个复杂对象数组,其中可能包含更多对象数组。我想将它们转换为CSV文件。只要有对象列表,数据就会解析为[object Object]
。例如,如果一个人有两封电子邮件,我想以两行打印这些电子邮件,以此类推,针对每个对象。地址可以连接到一个字符串,例如“法国,巴黎,someStreet 15”。
代码在此pen中。
以下是数据:
var names = [
{
Name: [{First: "Peter", Last:"john"}],
WorkPlace: [{Company: "Intel", emails: ["jack@intell.com","admin@intell.com"]}],
Age: 33.45,
Adress: [{Country:"UK", city: "London", street:"Oak", strtNumber:16},
{Country:"Italy", city: "MIlan", street:"Zabin", strtNumber:2}]
},
{
Name: [{First: "jack", Last:"Smith"}],
WorkPlace: [{Company: "Intel", emails: ["jack@intell.com","admin@intell.com"]}],
Age: 30,
Adress: [{Country:"Portugal", city: "Lisbon", street:"crap", strtNumber:144},
{Country:"Greece", city: "Athenes", street:"Hercules", strtNumber:55}]
},
{
Name: [{First: "jon", Last:"snow"}],
WorkPlace: [{Company: "Intel", emails: ["jack@intell.com","admin@intell.com"]}],
Age: 50,
Adress: [{Country:"Middle earth", city: "Winterfell", street:"raven", strtNumber:4345},
{Country:"Narnia", city: "Jacksonvile", street:"Great crap", strNumber:34}]
},
];
现在这是输出:
答案 0 :(得分:0)
该错误在您的converArrayOfObjectsToCSV方法内部,因为“ item [key]”的结果是一个数组(在“ Name”的情况下),您需要进一步指定如何处理此数组,否则只会被写到[object Object]。 您将必须使用item [key] [index]访问该元素,并对其属性进行迭代,并在需要时打印它们。
答案 1 :(得分:0)
[对象对象] 表示数据需要进一步转换才能获得所需的输出。
这是经过更新的CodePen,其中包含示例转换。
提供的转换例程使用 Object.values()转换所有数据:
function parseArrayOfObjects(arrayOfObj){
return arrayOfObj.map(item =>
Object.values(item).join(" ")) // convert each array item to it's values
.join(" ") // convert final array to string
.replace(",", " "); // remove any commas to preserve csv format
}
当然,您的需求可能会决定其他转化,因此请根据需要进行调整。