2015-01-13 2 views
1

Я не могу показаться, чтобы выяснить это, я создаю CSV строку из объекта с помощью lodash и я ожидаю выход вида: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 

вот как это выглядит в первенствует:

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' - вы можете просто добавить' .join ('') 'к результату вашего вызова' map'. –

ответ

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

благодарю вас за помощь! –

Смежные вопросы