Apps Scriptリファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

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;
}




Latest post

Googleドキュメントに見出しを追加したい

今回の例では、ドキュメントの末尾に「見出しD」 を追加します。 見出しA, B, C, Dのスタイルは、見出し3 ( HEADING3 ) に設定しています。  下記Code.gsの  GOOGLE_DOCUMENT_URL を設定して  addHeadingToEnd()  を...