LANG SELRCT

コードを書く場所

2018年7月31日火曜日

Googleドライブで指定したフォルダ内にあるファイルidを取得したい


指定したフォルダ内のファイルidを取得して
そのプレビューリンクを作りたくて書いたコードです



コード.gs
function get_view_path() {
  var ids = [];
  var folder = DriveApp.getFolderById("FOLDER_ID");
  var contents = folder.getFiles();
  var view_path = "https://drive.google.com/file/d/";
  while(contents.hasNext()) {
    var file = contents.next();
    var id = file.getId();
    ids.push(view_path + id+ "/view");
  }
  Logger.log(ids);
}


関連記事

特定のフォルダ内のファイル一覧とプレビューのリンクをシートに書き出す

2018年7月29日日曜日

Zendeskのwebhookを使ってみる


Zendeskのwebhookを利用する方法を調べたので書き残しておきます。


今回調べて実現したwebhookを使う手順
  1. Google Apps ScriptでWebアプリを作成する
  2. ZendeskのExtensionsのHTTP targetで1のアプリのURLを設定する
  3. ZendeskのTriggerで2を設定する



1.Google Apps ScriptでWebアプリを作成する

新規スクリプトファイルに以下のコードを書いて、ウェブアプリケーションとして導入する



コード.gs
function doPost(e) {
  console.log(e.postData.contents);
}
意訳
受け取ったデータeを
GCPのStackdriver Loggingに出す




STEP1 上記コードを新規スクリプトファイルに書


STEP2 ウェブアプリケーションとして導入...

STEP3
プロジェクトバージョン:説明を書く
次のユーザとしてアプリケーションを実行:自分
アプリケーションにアクセスできるユーザ:全員(匿名ユーザーを含む)←zendeskからアクセスできるように


STEP4 現在のウェブアプリケーションのURL:このURLをzendeskのHTTP targetのURLに設定する




2.ZendeskのExtensionsのHTTP targetで1のアプリのURLを設定する


STEP1
①歯車をクリック
②Extensionsをクリック
③add targetをクリック


STEP2 HTTP target >>をクリック

STEP3 HTTP targetを以下のように設定してSubmitをクリックする



3.ZendeskのTriggerで2を設定する


STEP1 
①Triggerをクリック
②Add triggerをクリック

STEP2 トリガー名と説明を設定

STEP3 Conditionsを以下のように設定

STEP4 Actionsで以下のように設定してSAVEする
JSONの中身はここで指定するらしい
JSON bodyに入れる{{{ticket.id}}}などは 下部のView available placeholders で確認できる


試してみる


新規チケットを作成するとStackdrive Loggingに以下のようなログが出力される

Stackdrive Loggingの確認方法はこちらに書きました
http://www.pre-practice.net/2018/07/consoleloggoogle-cloud.html


関連記事





参考

HTTPターゲットを使用したwebhookの作成
https://support.zendesk.com/hc/ja/articles/204890268-HTTP

Notifying external targets
https://support.zendesk.com/hc/en-us/articles/203662136#topic_hvf_eoa_vb

チケットの更新と通知のためのトリガの作成
https://support.zendesk.com/hc/ja/articles/203662106-Creating-and-managing-triggers-for-ticket-updates-and-notifications

About triggers and how they work
https://support.zendesk.com/hc/en-us/articles/203662246-About-triggers-and-how-they-work

プレースホルダの使用
https://support.zendesk.com/hc/ja/articles/203662116-Using-placeholders

外部ターゲットへ通知する

2018年7月25日水曜日

テキストを漢字、ひらがな、カタカナ、英数等で分割してユニークにしたそれぞれの件数を取得したい


こういうテキストがあって

"take your time and take it easy."

ユニークにして重複はカウントアップして
以下のような3パターンの結果を得たい

  1.  get_count_text1
    • [[and, easy, it, take, time, your], [1.0, 1.0, 1.0, 2.0, 1.0, 1.0]]
  2.  get_count_text2
    • [[and, 1.0], [easy, 1.0], [it, 1.0], [take, 2.0], [time, 1.0], [your, 1.0]]
  3. get_count_text3
    • [{count=1.0, text=and}, {count=1.0, text=easy}, {count=1.0, text=it}, {count=2.0, text=take}, {count=1.0, text=time}, {count=1.0, text=your}]


このコードで分割する単位
漢字、ひらがな、カタカナ、半角カタカナ、半角英数、全角英数

それを実現する正規表現
/[々〆〇〻㐂-頻]+|[ぁ-ゟー]+|[゠-ヿ]+|[ヲ-゚]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/g



コード.gs
function split_text() {
  var str = "take your time and take it easy.";
  var pattern = /[々〆〇〻㐂-頻]+|[ぁ-ゟー]+|[゠-ヿ]+|[ヲ-゚]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/g;
  var result = str.match(pattern);
  var count_text = get_count_text3(result);
  Logger.log(count_text);
}

function get_count_text1(array) {
  var num = 0;
  var word = [];
  var count = [];
  array = array.sort();
  for (var i = 0; i < array.length; i++) {
    if(i == 0){//配列内の最初の要素の場合
      word.push(array[i]);
      count.push(1);
      num = i;
    }else if(array[i] == array[(i-1)]) {//前の要素と同じ値の場合
      count[num] = count[num] + 1;//カウントアップ
    }else {//前の要素と違う場合
      word.push(array[i]);
      count.push(1);
      num = num + 1;
    }
  }
  var result = [word, count];
  return result;
}

function get_count_text2(array) {
  var num = 0;
  var result = [];
  array = array.sort();
  for (var i = 0; i < array.length; i++) {
    if(i == 0){
      result.push([array[i], 1]);
      num = i;
    }else if(array[i] == array[(i-1)]) {
      result[num][1] = result[num][1] + 1;
    }else {
      result.push([array[i], 1]);
      num = num + 1;
    }
  }
  return result;
}

function get_count_text3(array){
  var sorted = array.sort();
  var arrays = [];
  var count;
  var unique_i;
  for(var i = 0; i < sorted.length; i++){
    var obj = {}
    var value = sorted[i];
      if(value === sorted[i-1]){
        count++;
        arrays[unique_i]["count"] = count;
      }else{
        count = 1;
        obj["text"] = value;
        obj["count"] = count;
        unique_i = arrays.length;
        arrays.push(obj);
      }
    }
  return arrays;
}


テキストを漢字、ひらがな、カタカナ、半角カタカナ、半角英数、全角英数に分割したい


"遊んで食べて寝る"

というテキストを

 [遊, んで, 食, べて, 寝, る]

に分解するコードを書き残しておきます



コード.gs
function split_text() {
  var str = "遊んで食べて寝る";
  var pattern = /[々〆〇〻㐂-頻]+|[ぁ-ゟー]+|[゠-ヿ]+|[ヲ-゚]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/g;
  var result = str.match(pattern);
  Logger.log(result);
}
意訳
この機能がやること
テキストを用意して
どの単位で区切るか指定して
区切って
ログに出す




補足

ここで書いた正規表現は
漢字、ひらがな、カタカナ、半角カタカナ、半角英数、全角英数
の単位で分割するのでそれぞれどうなるか試すために

"漢字ひらがなカタカナカタカナabc123ABC123"

というテキストをstrに入れると


コード.gs
function split_text() {
  var str = "漢字ひらがなカタカナカタカナabc123ABC123";
  var pattern = /[々〆〇〻㐂-頻]+|[ぁ-ゟー]+|[゠-ヿ]+|[ヲ-゚]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/g;
  var result = str.match(pattern);
  Logger.log(result);
}


こうなります


関連記事

漢字、ひらがな、カタカナ、英数字を正規表現で区切る

2018年7月19日木曜日

アロー関数 () => は function()


すぐ忘れてしまうので備忘録として書き残しておこう


bt.onclick = () => { alert("hello") };



bt.onclick = function() { alert("hello") };




コード.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile("index");
}
意訳
この機能がやること
指定したHTMLファイルを表示する




index.html
<!DOCTYPE html>
<html>
  <body>
    <button id="bt">bt</button>
    <script>
      bt.onclick = function() { alert("hello") };
      //bt.onclick = () => { alert("hello") };
    </script>
  </body>
</html>
意訳
 


ボタン

ボタンをクリックしたらアラートを出す
アロー関数で書くとこう





参考

アロー関数
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions
引数が1つのときは()を省略できる

Fusion Tableを作成する(Table.insert)


新しいFusion Tableをコードで作成する例です



事前準備としてAPIを利用できるようにしておきます



今回は以下の内容を指定してテーブルを作成します
  • テーブル名は "name": "TABLE NAME"で指定
  • 列のヘッダをcolumnsの中で指定
    • "name": "Text"
    • "name": "Number"
  • それぞれのデータの型(どんなデータを入れるか)を指定
    • "type": "STRING"
    • "type": "NUMBER"

作成したテーブルのURLをログに出します


その1


コード.gs
function create_table(){
  var resource = {
    "kind": "fusiontables#table",
    "name": "TABLE NAME",
    "isExportable": false,
    "columns": [
      {
       "kind": "fusiontables#column",
        "name": "Text",
        "type": "STRING"
      },
      {
        "kind": "fusiontables#column",
        "name": "Number",
        "type": "NUMBER"
      }
    ]
      };
  var table = FusionTables.Table.insert(resource);
  var BASE_URL = "https://fusiontables.google.com/data?docid=";
  Logger.log(BASE_URL + table.tableId);
}


設定できるプロパティ

Resource representations
{
  "kind": "fusiontables#column",
  "columnId": integer,
  "name": string,
  "type": string,
  "description": string,
  "graphPredicate": string,
  "formatPattern": string,
  "validateData": boolean,
  "validValues": [
    string
  ],
  "baseColumn": {
    "tableIndex": integer,
    "columnId": integer
  },
  "columnPropertiesJson": string,
  "columnJsonSchema": string
}


create_table()を実行すると以下のようなログが出力されます


そのURLを開くと
以下のように設定したテーブル名とカラム(列)名のテーブルが作成されています


その2

入力する値を配列で用意して入力したい


このように列名と型をセットにした配列を用意して
  var values = [
    ["ID", "NUMBER"],
    ["QUESTION", "STRING"],
    ["ANSWER", "STRING"],
    ["DATE", "STRING"]
  ];


このように設定したい



コード.gs
function create_table(){
  var values = [
    ["ID", "NUMBER"], 
    ["QUESTION", "STRING"], 
    ["ANSWER", "STRING"], 
    ["DATE", "STRING"]
  ];
  var columns = [];
  for(var i = 0; i < values.length; i++){
    var obj = {};
    obj["name"] = values[i][0];
    obj["type"] = values[i][1];
    obj["kind"] = "fusiontables#column";
    columns.push(obj);
  }
  var resource = {
    "kind": "fusiontables#table",
    "name": "TABLE NAME",
    "isExportable": false,
    "columns": columns
    };
  var table = FusionTables.Table.insert(resource);
  var BASE_URL = "https://fusiontables.google.com/data?docid=";
  Logger.log(BASE_URL + table.tableId);
}



参考

Table: insert
https://developers.google.com/fusiontables/docs/v2/reference/table/insert

Column
https://developers.google.com/fusiontables/docs/v2/reference/column

Table / Resource representations
https://developers.google.com/fusiontables/docs/v2/reference/table#resource

About Fusion Tables
https://support.google.com/fusiontables/answer/2571232


こちらのQiita記事も参考にさせていただきました
https://qiita.com/U11/items/91e7da3884f2592d70e3

2018年7月18日水曜日

Fusion Tableのデータを取得する(select)


SELECTやWHEREなどを使って
Fusion Tableからデータを抽出するコードの例です


このようなFusion Tableがあって
Numberが1のTextを取得してみます



事前準備としてAPIを利用できるようにしておきます


Fusion TableのデータをSQLで抽出するコードの例

コード.gs
function select_data(){
  var sql = 'SELECT Text FROM ' + table_id + " WHERE Number = 1";
  var result = FusionTables.Query.sqlGet(sql);
  Logger.log(result);
}


select_data()を実行すると以下のように指定したデータがログに出ます



試してみたこと


LIKEで取得してみる
var sql = 'SELECT Text FROM ' + table_id + " WHERE Number LIKE '%O%'";

NOT LIKEは使えない
var sql = 'SELECT Text FROM ' + table_id + " WHERE Number NOT LIKE '%O%'";


CONTAINSを使ってみる
var sql = 'SELECT TEXT FROM ' + practice_table_id + " WHERE TEXT CONTAINS 'テキスト'";

DOES NOT CONTAINSを使ってみる
var sql = 'SELECT TEXT FROM ' + practice_table_id + " WHERE TEXT DOES NOT CONTAINS 'テキスト'";


MATCHESを使ってみる
var sql = 'SELECT TEXT FROM ' + table_id + " WHERE TEXT MATCHES '%テキスト%'";

NOT MATCHESを使ってみる
var sql = 'SELECT TEXT FROM ' + table_id + " WHERE TEXT NOT MATCHES '%テキスト%'";


AND検索
var sql = 'SELECT Text FROM ' + table_id + " WHERE Text LIKE '%テキスト%' AND Text LIKE '%テキスト2%'";


OR検索
サポートされていないようです
Row and Query SQL Referenceに以下のように記載されていました
OR is not supported. (If you are looking for OR, consider the IN operator. It will do the trick in certain queries).
INでやってみる(%は使えない)
var sql = 'SELECT TEXT FROM ' + practice_table_id + " WHERE TEXT IN ('テキスト', 'テキスト2')";


完全一致
var sql = 'SELECT Text FROM ' + table_id + " WHERE Text = 'テキスト'";


TextとNumberをSELECT
var sql = 'SELECT Text, Number FROM ' + table_id + " WHERE TEXT LIKE '%テキスト%'";


参考

Query: sqlGet
https://developers.google.com/fusiontables/docs/v2/reference/query/sqlGet

Fusion Tables Service
https://developers.google.com/apps-script/advanced/fusion-tables

Fusion Tables API v2 (revision 26)
https://developers.google.com/resources/api-libraries/documentation/fusiontables/v2/java/latest/com/google/api/services/fusiontables/Fusiontables.Query.Sql.html

Filter with "matches" operator
https://support.google.com/fusiontables/answer/171204?hl=en

Row and Query SQL Reference

Reserved words
AND
ASC
AS
BY
CASE
CIRCLE
CONTAINS
CONTAIN
CREATE
DELETE
DESCRIBE
DESC
DOES
DROP
ENDS
EQUAL
FROM
GROUP
IGNORING
IN
INSERT
INTO
JOIN
LATLNG
LEFT
LIKE
LIMIT
MATCHES
NEAR
NOT
OFFSET
ORDER
OUTER
POLYGON
RECTANGLE
ROWID
SELECT
SET
SHOW
SKIP
ST_DISTANCE
ST_INTERSECTS
STARTS
TABLES
TABLE
TO
UPDATE
VALUES
VIEW
WHERE
WITH
ID
NUMBER
DOCID
STRING

Fusion Tableのデータを更新する(update)


Fusion Table内でデータを更新する方法を試したコードです



事前準備としてAPIを利用できるようにしておきます


Fusion Tableのデータを更新するコードの例

コード.gs
function update_table(){
  var location = "むこう";
  var date = "2018/07/17";
  var query = "UPDATE " + table_id + " SET Location = '" + location +  "', Date = '" + date + "' WHERE Number = " + 1;
  FusionTables.Query.sql(query);
}


update_table()を実行すると以下のように指定した行のデータが更新されます

BEFORE


AFTER



Fusion Tableの行を削除する(delete)


Fusion Table内でTextが空の行を削除したくて試したコードです



事前準備としてAPIを利用できるようにしておきます


Fusion Tableのデータを削除するコードの例

コード.gs
function delete_row(){
  var sql = "DELETE FROM " + table_id + " WHERE Text = ''";
  var res = FusionTables.Query.sql(sql); 
}


delete_row()を実行すると以下のようにTextが空の行が削除されます

BEFORE


AFTER



Fusion Tableにデータを追加する(importRows)


大量のデータを追加する場合はimportRowsを使うと良いそうなので試しました

INSERT INTOを使う方法は以下の記事に書きました

INSERT INTOではすべての列にデータを入れなくても追加できましたが
importRowsでは存在するすべての列にデータを入れないと
以下のようなエラーが出て追加できないようです

Content has a different number of columns than the table



事前準備としてAPIを利用できるようにしておきます


Fusion TableにimportRowsでデータを追加するコードの例

その1


こういう形で追加するデータを用意する
  var records =
    "TWO, 2, ここ, 2018/07/18\n" +
    "THREE, 3, そこ, 2018/07/19\n";

コード.gs
function import_rows(){
  var records = 
    "TWO, 2, ここ, 2018/07/18\n" + 
    "THREE, 3, そこ, 2018/07/19\n";
  var blob = Utilities.newBlob(records, "application/octet-stream");
  FusionTables.Table.importRows(table_id, blob); 
}


import_rows()を実行すると以下のように行が追加されます
黄色いハイライトはそんな場所ないよってことらしいです
Locationのデータの正確性はこの記事では無視します

Locationはこのあたりが参考になりそう



その2


こういう形で追加するデータを用意する
  var values = [
                       ["FOUR", 4, "あそこ", "2018/07/20"],
                       ["FIVE", 5, "どこ", "2018/07/21"]
                     ];

コード.gs
function import_rows2(){
  var values = [["FOUR", 4, "あそこ", "2018/07/20"], ["FIVE", 5, "どこ", "2018/07/21"]];
  var records = "";
  for(var i = 0; i < values.length; i++){
    records += values[i] + "\n"
  }
  var blob = Utilities.newBlob(records, "application/octet-stream");
  FusionTables.Table.importRows(table_id, blob); 
}


import_rows2()を実行すると以下のように行が追加されます


その3


このようにスプレッドシートに用意したデータを取得して追加する

コード.gs
function import_rows3(){
  var ss_url = "対象のスプレッドシートURL";
  var ss = SpreadsheetApp.openByUrl(ss_url);
  var sh = ss.getSheets()[0];
  var range = sh.getDataRange();
  var values = range.getDisplayValues();
  var records = "";
  for(var i = 0; i < values.length; i++){
    records += values[i] + "\n"
  }
  var rowsBlob = Utilities.newBlob(records, "application/octet-stream");
  FusionTables.Table.importRows(table_id, rowsBlob); 
}


import_rows3()を実行すると以下のように行が追加されます



補足


シートのセル内に改行、シングルクオート、ダブルクオート、カンマなどがあるとそこで区切られてカラムの数が変わってしまうため消しておきます
(またはreplaceで全角などに変えます)

正規表現で消す例

.replace(/\r\n/g, "").replace(/\n/g, "").replace(/"/g, "").replace(/'/g, "") .replace(/,/g, "")

または
.replace(/\r\n|\n|"|'|,/g, "")

または全角に変える
.replace(/\r\n/g, "\r\n").replace(/\n/g, "\n").replace(/"/g, "”").replace(/'/g, "’") .replace(/,/g, ",").replace(/./g, ".");


スプレッドシートのURLを渡して
対象のシートを取得して
table_idのFusion TableにデータをINSERTする例


コード.gs
var table_id = "TABLE_ID";

function get_sheet_by_url() {
  var ss_url = "https://docs.google.com/spreadsheets/d/スプレッドシートIDedit#gid=シートID";
  var sh = get_sheet(ss_url);
  import_rows4(sh);
}

function get_sheet(ss_url) {
  var ss = SpreadsheetApp.openByUrl(ss_url);
  var sh_id = ss_url.split("gid=")[1];
  var shs = ss.getSheets();
  for (var i = 0; i < shs.length; i++) {
    if (shs[i].getSheetId() == sh_id) {
      break;
    }
  }
  var sheet = ss.getSheets()[i];
  return sheet;
}

function import_rows4(sh){
  var range = sh.getDataRange();
  var values = range.getDisplayValues();
  var records = "";
  for(var i = 0; i < values.length; i++){
    var array = values_without_newline(values[i]);
    records += array + "\n"
  }
  var rowsBlob = Utilities.newBlob(records, "application/octet-stream");
  FusionTables.Table.importRows(table_id, rowsBlob); 
}

function values_without_newline(values){
  var array = [];
  for(var i = 0; i < values.length; i++){
    array.push(values[i].replace(/\r\n|\n|"|'|,/g, ""));
  }
  return array;
}


Fusion Tableにデータを追加する(INSERT INTO)


大量のデータを追加する場合はimportRowsを使うと良いようです



事前準備としてAPIを利用できるようにしておきます


Fusion Tableにデータを追加するコードの例

コード.gs
function insert_into(){
  var table_id = "TABLE_ID";
  var sql = "INSERT INTO " + table_id + " (Text, Number) VALUES ('ONE', 1);"
  FusionTables.Query.sql(sql);
}


insert_into()を実行すると以下のように行が追加されます



2018年7月16日月曜日

console.log()でGoogle Cloud Platformにログを出す(Stackdriver Logging)


Logger.logでは省略されるログをStackdriver Loggingで出せることを知ったので備忘録として書き残しておきます。

※この記事を書いた後に仕様変更があり、新しく作られたスクリプトプロジェクトからStackdriverのログに直接アクセスするには、標準のGCPプロジェクトを使用する必要があるようです。
Stackdriver logs are attached to the GCP project associated with your Apps Script. You can view a simplified version of these logs in the Apps Script dashboard. To make full use of Stackdriver Logging and its capabilities, use a standard GCP project with your script project. This lets you access Stackdriver logs directly in the GCP Console and gives you more viewing and filtering options.
using_stackdriver_logging



コード.gs内でconsole.log("出したいログ")を書いて
myFunctionを実行して


表示>Stackdriver Loggingを開くと

このようにログを出せる



補足




コード.gs
function myFunction() {
  console.log("出したいログ");
}


参考

2018年7月13日金曜日

ヘッダの文字列を用意してシートの一行目に自動で入力したい


入力したい文字列をこのように配列で用意して
var array = [
  "TITLE",
  "DETAIL",
  "NAME",
  "DATE"
];


シートの一行目に一気に入れる

ということをやりたくて書いたコードです


Container-bound Scriptsでスプレッドシート内に書きたい場合


コード.gs
/************************************
ヘッダにしたい文字列
************************************/
var array = [
  "TITLE",
  "DETAIL",
  "NAME",
  "DATE"
];

/************************************
1行目に自動入力する
************************************/
function set_header(){
  var sh = SpreadsheetApp.getActiveSheet();
  var start_row = 1;
  var start_col = 1;
  var num_rows = 1;
  var num_cols = array.length;
  var range = sh.getRange(start_row, start_col, num_rows, num_cols);
  range.setValues([array]); 
}



Standalone Scriptsで書きたい場合


コード.gs
/************************************
オブジェクトに中身をシートに書き出す順番を指定
************************************/
var array = [
  "TITLE",
  "DETAIL",
  "NAME",
  "DATE"
];

/************************************
ヘッダーをD列以降に自動入力する
ss_url:入力したいスプレッドシートのURL
sh_id:その中のシートID
************************************/
function set_header(){
  var ss_url = "対象のスプレッドシートのURL";
  var ss = SpreadsheetApp.openByUrl(ss_url);
  var sh_id = 0;
  var sh = get_sheet(ss, sh_id);
  var start_row = 1;
  var start_col = 1;
  var num_rows = 1;
  var num_cols = array.length;
  var range = sh.getRange(start_row, start_col, num_rows, num_cols);
  range.setValues([array]); 
}

/************************************
シートIDを受け取ってシートを見つけて返す
************************************/
function get_sheet(ss, sh_id) {
  var shs = ss.getSheets();
  for (var i = 0; i < shs.length; i++) {
    if (shs[i].getSheetId() == sh_id) {
      break;
    }
  }
  var sh = ss.getSheets()[i];
  return sh;
}



参考

Standalone Scripts
https://developers.google.com/apps-script/guides/standalone

Container-bound Scripts
https://developers.google.com/apps-script/guides/bound


2018年7月5日木曜日

オブジェクトの中から条件に一致する要素を抜き出す(filter)


このようなオブジェクトがあって

var obj = [
  {"en": "Aries", "ja": "おひつじ座"},
  {"en": "Taurus", "ja": "おうし座"},
  {"en": "Gemini", "ja": "ふたご座"},
  {"en": "Cancer", "ja": "かに座"},
  {"en": "Leo", "ja": "しし座"},
  {"en": "Virgo", "ja": "おとめ座"},
  {"en": "Libra", "ja": "てんびん座"},
  ...
}

en が Libra のものを抽出したい



コード.gs
var obj = [
  {"en": "Aries", "ja": "おひつじ座"},
  {"en": "Taurus", "ja": "おうし座"},
  {"en": "Gemini", "ja": "ふたご座"},
  {"en": "Cancer", "ja": "かに座"},
  {"en": "Leo", "ja": "しし座"},
  {"en": "Virgo", "ja": "おとめ座"},
  {"en": "Libra", "ja": "てんびん座"},
  {"en": "Scorpius", "ja": "さそり座"},
  {"en": "Sagittarius", "ja": "いて座"},
  {"en": "Capriconus", "ja": "やぎ座"},
  {"en": "Aquarius", "ja": "みずがめ座"},
  {"en": "Pisces", "ja": "うお座"}
]

function filter_obj() {
  var filtered = obj.filter(judge);
  var result = get_result(filtered);
  Logger.log(result);
}

function judge(items) {
  if(items["en"] === "Libra"){
    return true;
  }else{
    return false;
  }
}

function get_result(filtered) {
  var result = [];
  for (var i = 0; i < filtered.length; i++) {
    result.push([filtered[i]["en"], filtered[i]["ja"]]);
  }
  return result;
}



filter_obj()の実行結果


関連記事