var values = ["take", "your", "time", "take", "care", "of", "your", "take"]
上のような配列があって
この中で同じ値がいくつあるか
以下のようなオブジェクトで返したい
{"care":1,"of":1,"take":3,"time":1,"your":2}
コード.gs
function result(){ var values = ["take", "your", "time", "take", "care", "of", "your", "take"]; var obj = get_result_obj(values); Logger.log(JSON.stringify(obj)); } function get_result_obj(values) { var num = 0; var word = []; var count = []; var obj = {}; values = values.sort(); for (var i = 0; i < values.length; i++) { if(i == 0){ word.push(values[0]); count.push(1); num = 0; }else if(values[i] == values[(i-1)]) { count[num] = count[num] + 1; }else { word.push(values[i]); count.push(1); num = num + 1; } obj[values[i]] = count[num]; } Logger.log([word, count]); return obj; } |
意訳この機能がやること 配列を用意して get_result_objに渡して 結果をJSON形式でログに出す この機能がやること numに0を入れて wordの配列を用意して countの配列を用意して objという空のオブジェクトを用意して 渡されたvalues配列をソートして 配列の要素の数だけ以下を繰り返す もし最初の処理なら(つまりiが0の場合) word配列にvaluesの先頭(0番目)の値を追加して countに1を追加して numに0を入れる もしi番目の値が1つ前の値と同じなら(つまり重複する値の場合) count配列のnum番目の値に1を足す それ以外なら word配列にi番目の値を追加して count配列に1を追加して numに1を足す objオブジェクトでvaluesのi番目の値をkeyとするプロパティのvalueに、count配列のnum番目の値を入れる(これで 単語: 件数の形になる) word配列とcount配列をログに出して objオブジェクトを返す |