59

私はこの投稿をフォローしましたJavaScript配列情報をcsvにエクスポートする方法(クライアント側)? csv ファイルとして書き込まれたネストされた js 配列を取得します。

配列は次のようになります。

var test_array = [["name1", 2, 3], ["name2", 4, 5], ["name3", 6, 7], ["name4", 8, 9], ["name5", 10, 11]];

リンクで指定されたコードは、csv ファイルの 3 行目以降の残りの値がすべて同じ行にあることを除いて、うまく機能します。

name1,2,3
name2,4,5
name3,6,7
name4,8,9name5,10,11 etc etc

これがなぜなのか、誰かが光を当てることができますか? ChromeまたはFFを使用して同じ。

ありがとう

編集

jsfiddle http://jsfiddle.net/iaingallagher/dJKz6/

イアン

4

10 に答える 10

27

単純な csv の場合は、1 つの map() と join() で十分です。

var csv = test_array.map(function(d){
    return d.join();
}).join('\n');

/* Results in 
name1,2,3
name2,4,5
name3,6,7
name4,8,9
name5,10,11

このメソッドでは、内部にカンマ以外の列区切りを指定することもできますjoin。たとえば、タブ:d.join('\t')

一方、適切に行い、文字列を引用符""で囲みたい場合は、JSON マジックを使用できます。

var csv = test_array.map(function(d){
   return JSON.stringify(d);
})
.join('\n') 
.replace(/(^\[)|(\]$)/mg, ''); // remove opening [ and closing ] brackets from each line 

/* would produce
"name1",2,3
"name2",4,5
"name3",6,7
"name4",8,9
"name5",10,11

次のようなオブジェクトの配列がある場合:

var data = [
  {"title": "Book title 1", "author": "Name1 Surname1"},
  {"title": "Book title 2", "author": "Name2 Surname2"},
  {"title": "Book title 3", "author": "Name3 Surname3"},
  {"title": "Book title 4", "author": "Name4 Surname4"}
];

// use
var csv = data.map(function(d){
    return JSON.stringify(Object.values(d));
})
.join('\n') 
.replace(/(^\[)|(\]$)/mg, '');
于 2015-04-30T19:51:50.353 に答える
0

選択された答えはおそらく正しいですが、不必要に不明確なようです。

Shomz の Fiddleは非常に役立つことがわかりましたが、これも不必要に不明確です。(編集: Fiddle が OP の Fiddle に基づいていることがわかりました。)

これが私のバージョン(私がフィドルを作成したもの)で、より明確だと思います:

function downloadableCSV(rows) {
  var content = "data:text/csv;charset=utf-8,";

  rows.forEach(function(row, index) {
    content += row.join(",") + "\n";
  });

  return encodeURI(content);
}

var rows = [
  ["name1", 2, 3],
  ["name2", 4, 5],
  ["name3", 6, 7],
  ["name4", 8, 9],
  ["name5", 10, 11]
];

$("#download").click(function() {
  window.open(downloadableCSV(rows));
});
于 2016-12-07T21:16:21.280 に答える
0

ES6:

let csv = test_array.map(row=>row.join(',')).join('\n') 
//test_array being your 2D array
于 2020-10-31T05:40:05.273 に答える