質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

1799閲覧

[GAS] キーが一致するオブジェクトを配列にまとめる

nananaokiu

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2021/10/20 01:54

前提・実現したいこと

下記のような配列オブジェクトがあったときに、

gas

1var info = [ 2 { key1: "東京", key2: 1000, key3: 1 }, 3 { key1: "東京", key2: 2000, key3: 2​ }, 4 { key1: "大阪", key2: 3000, key3: 3​ }, 5 { key1: "大阪", key2: 4000, key3: 4​ }, 6 { key1: "福岡", key2: 5000, key3: 5​ }, 7 { key1: "福岡", key2: 6000, key3: 6​ } 8]

最終的には下記のような配列オブジェクトに分割したいです。
key1が一致する要素を抽出して新たな配列に入れたいです。

gas

1var tokyo = [ 2 { key1: "東京", key2: 1000, key3: 1 }, 3 { key1: "東京", key2: 2000, key3: 2​ } 4] 5 6var osaka = [ 7 { key1: "大阪", key2: 3000, key3: 3​ }, 8 { key1: "大阪", key2: 4000, key3: 4​ } 9] 10 11var fukuoka = [ 12 { key1: "福岡", key2: 5000, key3: 5​ }, 13 { key1: "福岡", key2: 6000, key3: 6​ } 14] 15

どなたかご教示のほど、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2021/10/22 20:41

元になるシートのサンプルとまとめた結果をどう使うのか(特に別のシートに戻すのではないか)のあたりを追記してください。 でなければ、google apps script のタグは無意味なので削除してください。
guest

回答1

0

2通り考えてみたぞなもし。

**第1案: **東京, 大阪, 福岡のそれぞれについて filter で得る:

GAS

1var tokyo = info.filter(({ key1 }) => key1 === "東京"); 2var osaka = info.filter(({ key1 }) => key1 === "大阪"); 3var fukuoka = info.filter(({ key1 }) => key1 === "福岡");

**第2案: ** reduce を使ってグルーピングしたオブジェクトを作り、それを分割代入する:

あらかじめ、漢字の都道府県名のそれぞれに識別子を対応させるオブジェクトを作っておく。

GAS

1var prefNameToCode = { "東京": "tokyo", "大阪": "osaka", "福岡": "fukuoka" };

そして、以下で、tokyo, osaka, fukuoka を得る。

GAS

1var { tokyo, osaka, fukuoka } = info.reduce((map, e) => { 2 var pref = prefNameToCode[e.key1]; 3 if (!map[pref]) map[pref] = []; 4 map[pref].push(e); 5 return map; 6}, {});

投稿2021/10/20 03:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nananaokiu

2021/10/21 03:48

ありがとうございます!いただいた回答を元に進めれらそうです! 1点追加で質問なのですが、 var { tokyo, osaka, fukuoka } = info.reduce((map, e) => {} ↑の { tokyo, osaka, fukuoka } はシートから値を取得して、配列などでここに挿入することは可能でしょうか? シートから取得した値を、分割代入先の配列のタイトルにしたいです。 週に1度この処理を行うのですが、週によって県名が異なります。 { tokyo, osaka, fukuoka } で作りたい週もあれば、 { tokyo, kyoto, kanagawa } で作りたい週もあります。 それらはシートから取得します。 可能であればここを変数にしたいです。 var prefNameToCode = { "東京": "tokyo", "大阪": "osaka", "福岡": "fukuoka" }; ↑のオブジェクトはシートから値を取得して作成しようと思います。
退会済みユーザー

退会済みユーザー

2021/10/21 09:20

コメントありがとうございます。 > ↑の { tokyo, osaka, fukuoka } はシートから値を取得して、配列などでここに挿入することは可能でしょうか? の件で、要件の確認なのですが、 > { tokyo, osaka, fukuoka } で作りたい週もあれば、 > { tokyo, kyoto, kanagawa } で作りたい週もあります。 ということは、 ・回答したコードで、filter だったり reduce だったりを使っている、元データの配列 info には、週次で抽出したい都道府県以外のデータも入っており、 ・そのような info 中から、 > { tokyo, osaka, fukuoka } だったり、 > { tokyo, kyoto, kanagawa } だったりの、何らかで選ばれた(だいたい3個程度の)都道府県のデータを、その都道府県別の配列として抽出したい。 というのが要件だと思ってよいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問