["す", "も", "も", "も", "も", "も", "も", "も", "も", "の", "う", "ち"]
という配列から
重複件数を取得して以下のようなオブジェクトを作りたい
[
{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を返す
|
実行結果
