LANG SELRCT

Google Apps Scriptのコードを書く場所  (新規作成: スプレッドシート | スクリプトエディタ

2019年12月31日火曜日

オブジェクトの特定のキーの値が大きい順に2次元配列を作りたい


言語化するのが難しいのでたぶんこのページに辿り着く人は少ないと思いますが
備忘録として書き残しておきます


今回やりたかったこと

こういうオブジェクトがあるときに
[
    {
      "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;
}




最新の投稿

Pixel 5でSuicaが使えないときはGoogle PayでSuicaを有効にしてみる

Pixel 5への機種変でSuicaが使えない人向けに書きました。 MISSION Pixel 5でSuicaを使えるようにする SOLUTION 旧端末で機種変更の設定を行う NFCをオンにする Google PayでSuicaを有効にする PROBLEMS 以前...