LANG SELRCT

Apps Script Reference  (Create: Create new Spreadsheet | Create new Apps Script

Tuesday, December 31, 2019

オブジェクトの特定のキーの値が大きい順に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

Extracting data from Google Sheets with regular expressions

Introduction Regular expressions are a powerful tool that can be used to extract data from text.  In Google Sheets, regular expressions ca...