言語化するのが難しいのでたぶんこのページに辿り着く人は少ないと思いますが
備忘録として書き残しておきます
今回やりたかったこと
こういうオブジェクトがあるときに
[
{
"text": "your",
"count": 1129
}, {
"text": "take",
"count": 994
}, {
"text": "time",
"count": 872
}
];
}
"take your time"
という文字列を与えて
countの数値が大きい順に並べ替えてこういう二次元配列を作る
[[your, 1129.0], [take, 994.0], [time, 872.0]]
最初はこういうオブジェクトを作ろうかと思った
{
"your": 1129,
"take": 994,
"time": 872,
}
けれどオブジェクトの順番は保証されないので二次元配列で返すことにしました
コード.gs
function myFunction() {
var str = "take your time";
var objsArray = returnObj();
var sortedArrays = run(objsArray, str);
Logger.log(sortedArrays);
}
function run(objsArray, str) {
var strArray = str.split(" ");
var obj = {};
for(var i = 0; i < strArray.length; i++) {
var value = strArray[i]
var count = filterObj(objsArray, value);
obj[value] = count;
}
var sortedArrays = getSortedArrays(obj);
return sortedArrays;
}
function getSortedArrays(obj) {
var keys = Object.keys(obj);
var values = []
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = obj[key];
values.push([key, value]);
}
var arrays = getSort(values);
return arrays;
}
function getSort(array) {
array.sort(sorting);
return array;
}
function sorting(a, b){
return b[1] - a[1];
}
function returnObj() {
var objsArray = [
{
"text": "your",
"count": 1129
}, {
"text": "take",
"count": 994
}, {
"text": "time",
"count": 872
}
];
return objsArray;
}
function filterObj(objsArray, value) {
var filtered = objsArray.filter(function(items) { return items["text"] === value; });
var count = filtered[0]["count"];
return count;
}
|