2015-01-13 47 views
1

我似乎無法弄清楚這一個,我使用lodash創建從對象的CSV字符串,我期待輸出看起來像這樣:Lodash附加一個逗號

data:text/csv;charset=utf-8,prop1,prop2,props 
d1,d2,n1;n2,d3 
d4,d5,n2;n3,d6 
d7,d8,n4;n5,d9 

,但我所得到的是這個:

data:text/csv;charset=utf-8,prop1,prop2,props 
d1,d2,n1;n2,d3 
,d4,d5,n2;n3,d6 
,d7,d8,n4;n5,d9 

這裏是它的外觀在Excel中:

enter image description here

下面是一個說明該問題的一些簡單的代碼:

var csvContent = "data:text/csv;charset=utf-8,prop1,prop2,props\n", 
data = [ 
    {prop1: "d1", prop2: "d2", props: [{name: "n1"},{name: "n2"}], prop3: "d3" }, 
    {prop1: "d4", prop2: "d5", props: [{name: "n2"},{name: "n3"}], prop3: "d6" }, 
    {prop1: "d7", prop2: "d8", props: [{name: "n4"},{name: "n5"}], prop3: "d9" } 
]; 
csvContent +=_.map(data, function(rs) { 
    var tmp = {}; 
    tmp.prop1 = rs.prop1; 
    tmp.prop2 = rs.prop2; 
    tmp.props = _.map(rs.props, function(r) { return r.name; }).join(';'); 
    tmp.prop3 = rs.prop3; 
    return _.values(tmp).join(",") + '\n'; 
}); 
console.log(csvContent); 

jsfiddle

+0

但他們不能有效地相同的(從一個CSV點)? – atmd

+0

不,csv列不排隊(在excel中查找),第一個數據行下的所有行都向右偏移一個。 –

+0

您正在將一個數組追加到'csvContent'字符串中 - 您可以爲'map'調用的結果添加一個'.join('')'。 –

回答

1

這是你在找什麼?

var csvContent = "data:text/csv;charset=utf-8,prop1,prop2,props\n", 
data = [ 
    {prop1: "d1", prop2: "d2", props: [{name: "n1"},{name: "n2"}], prop3: "d3" }, 
    {prop1: "d4", prop2: "d5", props: [{name: "n2"},{name: "n3"}], prop3: "d6" }, 
    {prop1: "d7", prop2: "d8", props: [{name: "n4"},{name: "n5"}], prop3: "d9" } 
]; 

stuff = _.map(data, function(rs) { 
    var tmp = {}; 
    tmp.prop1 = rs.prop1; 
    tmp.prop2 = rs.prop2; 
    tmp.props = _.map(rs.props, function(r) { return r.name; }).join(';'); 
    tmp.prop3 = rs.prop3; 
    return _.values(tmp).join(","); 
}); 

csvContent += stuff.join('\n'); 

console.log(csvContent); 

我認爲問題是,你試圖添加csvContent(串)和_.map(...)(陣列)。相反,您應該只加入\n陣列並將其添加到csvContent

http://jsfiddle.net/85ast7n1/1/

+0

是的..它解決了這個問題,但我仍然在撓我的腦袋,爲什麼... –

+0

更新了我的答案 – Vic

+0

謝謝你的幫助! –