前提・実現したいこと
二次配列データを取得し、スクリプト内で並び替えを行おうとしています。
(その後バイナリーサーチをするため)
そこで過去に実装した並び替えプログラムを動かしたら、結果が正しくなく、
調査した所、表示形式を自動にしたデータ群をgetValues()したとき、
配列内のデータにNumberとStringが混同していると、
処理が正しく行われていない様に感じました。
恐らくJavaScriptの基本的な仕様の問題なのかもしれませんが、
知識不足でお手上げ状態でございます・・・
String とNumberの混同データをバイナリーサーチ出来る様に並び替えを行う事は出来るのでしょうか・・・?
それとも単純にfunction arrSort()のアルゴリズムが間違えているだけなのでしょうか?
ご意見いただけると幸いです。
該当のソースコード
GAS
1function mainTest(){ 2var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() 3var arr = ss.getRange("A2:A").getValues() 4arrSort(arr) 5ss.getRange(2,2,arr.length,1).setValues(arr) 6arrSort(arr,0,1) 7ss.getRange(2,3,arr.length,1).setValues(arr) 8 9} 10 11 12 13function arrSort(arr,col,desc){ 14 15 if(typeof col != 'number'){col = 0} 16 17const ascComp = function(a,b){ 18 if(a[col] < b[col] ) return -1; 19 if(a[col] > b[col] ) return 1; 20 return 0; 21 } 22 23const descComp = function(a,b){ 24 if( a[col] > b[col] ) return -1; 25 if( a[col] < b[col] ) return 1; 26 return 0; 27 } 28 29const blankComp = function(a, b) { 30 if (a[col] === "") return 1; 31 if (b[col] === "") return -1; 32 return 0; 33 } 34 35 if(desc != 1){ 36 arr.sort(ascComp); 37 arr.sort(blankComp); 38 }else{ 39 arr.sort(descComp); 40 } 41 return arr; 42}
試したこと
テストデータ
26879722
97531022
T3185186D
268D726
531556
A156
TA318
221
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/16 01:49