["ス", "モ", "モ", "も", "モ", "モ", "も", "モ", "モ", "の", "う", "ち"]
という配列から
重複件数が多い順に並べたオブジェクトを作りたい
[
{count=6.0, text=モ},
{count=2.0, text=も},
{count=1.0, text=う},
{count=1.0, text=ち},
{count=1.0, text=の},
{count=1.0, text=ス}
]
コード.gs
function get_result(){ var array = ["ス", "モ", "モ", "も", "モ", "モ", "も", "モ", "モ", "の", "う", "ち"]; var result = get_match_count(array); var desc = sort_obj(result) Logger.log(desc); } function get_match_count(array){ var sorted = array.sort(); var arrays = []; var count; var unique_i; for(var i = 0; i < sorted.length; i++){ var obj = {} var value = sorted[i]; if(value === sorted[i-1]){ count++; arrays[unique_i]["count"] = count; }else{ count = 1; obj["text"] = value; obj["count"] = count; unique_i = arrays.length; arrays.push(obj); } } return arrays; } function sort_obj(arrays){ var desc = arrays.sort(sorting); return desc; } function sorting(a, b){ return b["count"] - a["count"]; } |
意訳この機能がやること 配列を用意して get_match_countに渡して 結果をsort_objに渡して ログに出す この機能がやること 渡された配列をsortで並べ替えて(昇順) 結果を入れる配列を用意して 要素の重複件数を入れるcountの入れ物を用意して 要素を一意にした時のindexを指定するunique_iの入れ物を用意して 配列の数だけ以下を繰り返す オブジェクトを新しく作る 配列内の値を一つずつ取得して もしひとつ前の値と同じなら countに1を足して arrays内で現在targetにしているindexのcountの値に入れる 同じじゃなければ countに1を入れて obj{"text": value, "count": count}を作って unique_iに現在のarraysの要素数を入れて(つまり一意の値の数) arraysに追加して 出来上がったarraysを返す この機能がやること 渡されたarraysのcountを降順に並べ替えた配列を 返す この機能がやること arrays内の値を比較して大きい順に並べ替えた配列に値を返す |
実行結果
参考
Array.prototype.sort()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
Array.prototype.sort()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort