["す", "も", "も", "も", "も", "も", "も", "も", "も", "の", "う", "ち"]
という配列から
重複件数を取得して以下のようなオブジェクトを作りたい
[
{count=1.0, text=う},
{count=1.0, text=す},
{count=1.0, text=ち},
{count=1.0, text=の},
{count=8.0, text=も}
]
コード.gs
function get_result() { var array = ["す", "も", "も", "も", "も", "も", "も", "も", "も", "の", "う", "ち"]; var result = get_match_count(array); Logger.log(result); } function get_match_count(array) { var sorted = array.sort(); var count = 1; var arrays = []; var target_i = 0; for (var i = 0; i < sorted.length; i++) { var obj = {} var value = sorted[i]; if (value == sorted[i - 1]) { count++; arrays[target_i]["count"] = count; } else { obj["text"] = value; obj["count"] = count; arrays.push(obj); target_i = i; count = 1; } } return arrays; } |
意訳この機能がやること 配列を用意して get_match_countに渡して 結果をログに出す この機能がやること 渡された配列をsortで並べ替えて(昇順) countの初期値を1にして 結果を入れる配列を用意して 配列の数だけ以下を繰り返す オブジェクトを新しく作る 配列内の値を一つずつ取得して もしひとつ前の値と同じなら countに1を足して arrays内で現在targetにしているindexのcountの値に入れる 同じじゃなければ obj{"text": value, "count": count}を作って arraysに追加して target_iに現在のiを入れて countを1に初期化する 出来上がったarraysを返す |
実行結果