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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1584閲覧

配列で全部空文字の要素を削除して、日時の昇順で二次元配列を並べ替えたい。

hogebar

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/09/12 14:15

前提・実現したいこと

配列で全部空文字の要素を削除して、日時の昇順で二次元配列を並べ替えたい。

該当のソースコード

js

1let rows = sheet.getRange("A2:C").getValues(); 2 3// rows 4rows = [ 5 ["2021/09/06 06:58:42","hoge","foo"], 6 ["2021/09/06 08:58:42","hoge","foo"], 7 ["2021/09/06 04:58:42","hoge","foo"], 8 ["","",""], 9 ["","",""], 10 ["","",""], 11 ["","",""], 12  ["2020/09/06 04:58:42","hoge","foo"], 13]; 14 15// こうなってほしい 16rows = [ 17  ["2020/09/06 04:58:42","hoge","foo"], 18 ["2021/09/06 04:58:42","hoge","foo"], 19 ["2021/09/06 06:58:42","hoge","foo"], 20 ["2021/09/06 08:58:42","hoge","foo"], 21]; 22 23// ループ処理

試したこと

日付の並び替えがなければ、ループで空要素の配列を弾けるのですが、並び替えをしてからループだとどうしたらいいのか、分かりません。
どなたか教えて頂きたいです。

補足情報(FW/ツールのバージョンなど)

Google App Script

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

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

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

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

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

mather

2021/09/12 14:22 編集

> 日付の並び替えがなければ、ループで空要素の配列を弾けるのですが 「試したこと」なので具体的なコードを質問内容に記載してください。 > 並び替えをしてからループだとどうしたらいいのか、分かりません。 「並び替え」は出来ているということでしょうか?こちらもコードがあれば記載しましょう。
hogebar

2021/09/12 15:00 編集

お答えありがとうございます。 両方単独では処理自体はできていたつもりです。 ``` // 空白行削除 for(const row of rows) { if(row[0] { // ここで判別 } } // 並び替え row.sort(function(a, b) { if (a[0]< b[0]) { return -1; } else { return 1; } }); ```
guest

回答1

0

ベストアンサー

こんなんでどないでっか?

GAS

1 2rows = rows.filter(([d]) => d).sort(([d1], [d2]) => new Date(d1) - new Date(d2)); 3 4

実行例:
イメージ説明

投稿2021/09/12 14:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hogebar

2021/09/12 14:53

お答えありがとうございます! まさか1行で解決策を掲示して頂けるとは思いませんでした。 ちょっと何やっているか頑張って理解します。
退会済みユーザー

退会済みユーザー

2021/09/12 15:52

おおきに〜 今回のように、配列の要素を絞ってからソートするとき、 配列.filter(…).sort(…) というのはよく使う手です。filter(...) は配列を返すので、filter(…) のすぐ後に、.sort(…) をつなげることができ(=メソッドチェーンで書ける。)、一行(というか一文)で書けます。 sort(…)もまたソート結果の配列を返すので、ソートしてから絞るのであれば 配列.sort(…).filter(…) ですが、今回は、ソートキーとして日時の文字列を使うので、日時が空文字列の要素の除外を先に行うべきなので、filter のほうを先にしています。
hogebar

2021/09/24 18:56 編集

回答を見落としておりました。 詳しく解説して頂きありがとうございます! メソッドチェーンは便利だけど、読む人にとっては難しく感じる可能性があるわけですね。 すみません。一つどうしても分からない場所があって質問させてください! rows.filter(([d]) => d) こちらの[d] => dを書くと、なぜ日付が選択されるのでしょうか? 検索してもこのような書き方の記事は見当たらなかったので気になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問