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オブジェクトを返す |