前提・実現したいこと
自前のライブラリに汎用性のあるスクリプトを作成したいと思っています。
内容は、
A.1次元配列なら、配列内のにあるデータのみを抽出。
B.2次元配列かつ、1行しかなければ、1次元配列と同等の結果を出力する。
C.2次元配列なら、最初の行の配列内にあるデータを基準にデータを抽出する。
(仮に最初の行の一部の列で空白かつ、別の行で同列の場所にデータがあった場合は、気にせず消す)
発生している問題・エラーメッセージ
諸々問題なく作成できましたが、自分の考え方(プログラムの書き方)が何となく変で、
やろうとしている内容に対して、必要以上に行が長くなり、スマートでない気がしています。
気分的にはFilter()やmap()的なものを使えば上手くできそうな気はしても、知識と経験乏しく、
なにかしら手法や考え方があるならば、ご教授いただけると幸いです。
また、1次元配列と2次元配列の判定方法は、
if(data[0][1] == null)
で正しいのでしょうか?
こちらも、何となく無理やりやってる気がして気になっております。
もし回答いただいた場合大変失礼になりますが、
いろいろな考え方があるかもしれませんので、
ベストアンサーのほうは数日たってからやろうと思います。
該当のソースコード
GAS
1function test(){ 2 3 var data1 = ["1","","","b","a","4","","e","","","","a","","",""]; 4 //スクリプト等で作成した場合の配列(1次) 5 var log = arrayBlankFilter(data1); 6 Logger.log(log); 7 //求める出力:[1, b, a, 4, e, a] 8 9 10 11 var data2 = [["No.","名前","備考","","","項目1","項目2","項目3","",""]] 12 //getValues()で作成した場合の、気分的には一次配列データ(実際は2次元配列) 13 var log = arrayBlankFilter(data2); 14 Logger.log(log); 15 //求める出力:[[No., 名前, 備考, 項目1, 項目2, 項目3]] 16 17 18 19 var data3 = [ 20 ["No.","名前","備考","","","項目1","項目2","項目3","",""], 21 ["1" ,"AAA","" ,"","","1" ,"5" ,"" ,"",""], 22 ["2" ,"ABA","BAA" ,"","","" ,"2" ,"" ,"",""], 23 ["3" ,"ACA","" ,"","","" ,"4" ,"2" ,"",""], 24 ["4" ,"ADA","BAC" ,"2","","1" ,"" ,"1" ,"a",""], 25 ] 26 //getValues()で作成した配列(2次元配列) 27 var log = arrayBlankFilter(data3); 28 Logger.log(log); 29 /*求める出力:[ 30 [No., 名前, 備考, 項目1, 項目2, 項目3], 31 [1 , AAA, , 1 , 5 , ], 32 [2 , ABA, BAA , , 2 , ], 33 [3 , ACA, , , 4 , 2 ], 34 [4 , ADA, BAC , 1 , , 1 ] 35 ] 36 */ 37 38 } 39 40 function arrayBlankFilter(data){ 41 var arr = []; 42 43 if(data[0][1] == null)//1次配列であれば、data[0][1]は存在しない 44 { 45 for(let i in data) 46 { 47 if(data[i] != "") 48 { 49 arr.push(data[i]); 50 } 51 } 52 }else 53 { 54 for(let i in data) //最初に格納スペースを生成しないとエラーになる 55 { 56 arr.push([]) 57 } 58 for(let i in data[0]) 59 { 60 if(data[0][i] != "") 61 { 62 for(let j in data) 63 { 64 arr[j].push(data[j][i]);//列の最初にデータがあれば縦方向にデータを構築していく 65 } 66 } 67 } 68 } 69 return arr 70 }
補足情報(FW/ツールのバージョンなど)
Chrome V8ランタイム
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/15 01:12