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

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

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

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

JavaScript

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

配列

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

Q&A

解決済

1回答

1735閲覧

GASでの多次元配列のソートに関して

musashidayo

総合スコア63

Google Apps Script

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

JavaScript

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

配列

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

0グッド

0クリップ

投稿2023/04/10 05:18

実現したいこと

GAS内で下記のような多次元配列を'key2'の数値で大きい順から小さい順にソートして大きい方から順にkey3のvalueを1,2,3といった具合に変更したい

array = [ [ '1', { key1:1, key2:100, key3:0 } ], [ '2', { key1:2, key2:2, key3:0 } ], [ '3', { key1:3, key2:10, key3:0 } ] ]; ⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩ array = [ [ '1', { key1:1, key2:100, key3:1 } ], [ '2', { key1:3, key2:10, key3:2 } ], [ '3', { key1:2, key2:2, key3:3 } ] ];

前提

上記の前半部分のソートのところで

array.sort((a, b) => { if(b.key2 > a.key2){ return 1; }else{ return -1; } });

こちらの記述でソートをかけようとしたところ

console.log(Object.entries(array)); ⇩ TypeError: array.sort is not a function

こちらの表示になってしまいつまずいております。
配列の構造的に違った書き方をする必要があるのでしょうか?

発生している問題・エラーメッセージ

TypeError: array.sort is not a function

該当のソースコード

GAS

1var array = 2 [ 3 [ 4 '1', 5 { 6 key1:1, 7 key2:100, 8 key3:0 9 } 10 ], 11 [ 12 '2', 13 { 14 key1:2, 15 key2:2, 16 key3:0 17 } 18 ], 19 [ 20 '3', 21 { 22 key1:3, 23 key2:10, 24 key3:0 25 } 26 ] 27 ]; 28 array.sort((a, b) => { 29 if(b.key2 > a.key2){ 30 return 1; 31 }else{ 32 return -1; 33 } 34 });

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

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

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

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

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

guest

回答1

0

ベストアンサー

配列要素も配列なのでkey2を参照するにはインデックスが必要です。

javascript

1 array.sort((a, b) => { 2 if (b[1].key2 > a[1].key2) { 3 return 1; 4 } else { 5 return -1; 6 } 7 }); 8 console.log(array); 9 array.forEach((v, i) => { 10 v[0] = (i + 1).toString(); 11 v[1].key3 = i + 1; 12 }); 13 console.log(array);

としてはご希望どおりになりませんか。

投稿2023/04/10 06:10

YellowGreen

総合スコア861

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

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

musashidayo

2023/04/10 06:47

ありがとうございます! 無事にご提供のコードでいけました。確かに[1,[...]],[2,[...]],の配列だとarray[1]を指定しないとkey2にアクセスできないですね…迅速に解決でき大変為になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問