連想配列の使い方、要素の参照方法が良く判らないので教えて下さい。
jQueryのjqGridで作成されている配列オブジェクトの値をCSVに出力するスクリプトです。
先人のソースを参考にして見よう見まねで、何とか動くようになり、結果をExcelで開くことも出来るのですが、
いわゆる標準的なCSVの形式として、文字列をダブルクォーテーションで囲む、という形式にすることが出来ていません。
列の属性を判断するには、sorttypeというプロパティを持っているのでそれを参照して、文字か数字かを判断すればよいと思っています。
連想配列の並び順が確保できなかったので、列の順番を付けるためにkeyOrderという配列を設けています。
この配列に値の順に、colModelの中のsorttypeプロパティが'int'の場合には数値と見なすという判断ができればよいかと思うのですが、
どのように検索、参照すればよいのでしょうか?
もっと簡単な方法でできるというご意見もあろうことは承知しておりますが、当面の課題におきましてアドバイスをいただければ幸いです。
よろしくご指導ください。
Javascript
1var dt = [ 2 {cd:"A001", name:"鈴木", age:35} 3 ,{cd:"A002", name:"佐藤", age:45} 4 ,{cd:"A003", name:"田中", age:55} 5]; 6 7var keyOrder = [ 8 "cd", 9 "name", 10 "age" 11]; 12 13 14$("#list").jqGrid({ 15 data: dt 16 ,datatype: "local" 17 ,colNames:['CD', '名前', '年齢'] 18 ,colModel:[ 19 {index:'cd', name:'cd', width:'50px', align:'center'}, 20 {index:'name', name:'name', width:'100px', align:'left'}, 21 {index:'age', name:'age', width:'80px', align:'right', sorttype:'int'}, 22 ] 23 ,height: 150 24 ,multiselect: true 25 ,caption: '一覧' 26 ,rowNum: 5 27 ,rowList: [5, 10, 20] 28 ,viewrecords: true 29 ,pager: 'pg01' 30}); 31 32var ListToCSV = { 33 export: function() { 34 var csv_data = ""; 35 var j; 36 var line; 37 // 行データを取得する 38 var sel_list = $('#list').getGridParam('data'); 39 j = 0; 40 line = ""; 41 var header_list = $('#list').getGridParam('colNames'); 42 // 列属性の取得 --> ここから sorttypeプロパティを取り出したい 43 var col_list = $('#list').getGridParam('colModel'); 44 // 見出しの値を取得 45 header_list.forEach(function( key ) { 46 // chekbox列の除外 47 if ( key.indexOf('checkbox') == -1) { 48 if ( j != 0 ) line += ","; 49 line += key; 50 j ++; 51 } 52 }); 53 line += '\n'; 54 csv_data += line; 55 // 明細の値を取得 56 for (var i = 0; i < sel_list.length; i++) { 57 j = 0; 58 line = ""; 59 // 連想配列は並び順が保証されないので定義された順番(keyOrder)に書き出す 60 keyOrder.forEach(function( key ) { 61 62 // 63 // この部分で、keyの値に対応する列のsorttypeというプロパティを参照 64 // 65 // col_list[key]['sorttype'] では駄目でした。 66 67 if(sel_list[i][key]){ 68 var innerValue = sel_list[i][key]===null?'':sel_list[i][key].toString(); 69 } else { 70 var innerValue = ''; 71 } 72 // " を "" に置換 73 var result = innerValue.replace(/"/g, '""'); 74 // , 又は \n を含んでいる場合は ""で囲う 75 if (result.search(/("|,|\n)/g) >= 0) 76 result = '"' + result + '"'; 77 if ( j != 0 ) line += ","; 78 line += result; 79 j ++; 80 //} 81 }); 82 console.log(">" + line); 83 line += '\n'; 84 csv_data += line; 85 } 86 // 頭にbomコードを付けた 87 var csv_data_sjis = "\uFEFF" + csv_data; 88 return csv_data_sjis; 89 } 90}
回答2件
あなたの回答
tips
プレビュー