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

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

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

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

Q&A

解決済

1回答

15439閲覧

javascript 2次元配列でのindexOf

ataru2222

総合スコア272

JavaScript

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

0グッド

0クリップ

投稿2021/06/01 06:00

前提・実現したいこと

javascript 二次元配列でのindexOf()検索をしたい

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

現在二次元配列の0の列に日付、1の列に祝日名が入っています。
javascriptで0の列と対象の日付を比較して
-1でなければ祝日名を取得するという処理を書こうとしているのですが、
二次元配列の取得方法がわかりません。

こちらのサイトでGoogle Apps Scriptという言語での書き方が載っていたのですが
似たような取得方法はjavascriptでも可能でしょうか?

https://tonari-it.com/gas-array-indexof-lastindexof/

該当のソースコード

↑のサイト内にあるサンプルコード

function indexNumber2() { const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); console.log(values[0].indexOf('C')); //2 console.log(values[1].indexOf(4)); //1 console.log(values[0].lastIndexOf('C')); //2 console.log(values[1].lastIndexOf(4)); //3 }

mapの{key : value}となるような書き方で取得はできないか?と試しましたが、
keyの部分が日付で同じ値が入っていないため、検索できませんでした。
keyの代わりとなるarray[0].indexOf('2020/6/1')のような書き方を探しております。

詳しい方いらっしゃいましたらご教示ください。
よろしくお願いいたします。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

yambejp

2021/06/01 06:07

何をしたいかよくわかりません valueのサンプルと、そこから何を得たいのか例示されたほうがよいでしょう
guest

回答1

0

ベストアンサー

入力サンプルがないので想像になりますが、

javascript

1var holidays = [ 2 ['1/1', '元日'], 3 ['2/11', '建国記念の日'], 4 ['2/23', '天皇誕生日'], 5 ... 6];

のような配列があるということでしょうか。

日付の形式が不明なので、そのまま適用はできませんが、以下のようにfilter関数を使えば目的の祝日情報を取得はできます。
filter関数は配列の条件抽出においては必須ですので必ず使い方を覚えましょう。

参考:MDNでの解説。MDNはその場でコードを試せるので非常にお勧めです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

javascript

1var holidays = [ 2 ['1/1', '元日'], 3 ['2/11', '建国記念の日'], 4 ['2/23', '天皇誕生日'], 5]; 6 7var targetDate = '2/23'; 8 9// サンプルではtargetDateと配列内の日付が一致しているかどうかで要素を抽出している 10var target = holidays.filter( e => e[0] === targetDate ); 11 12// filterの結果は配列で返ってくることに注意 13console.log(target); // -> [ [ '2/23', '天皇誕生日' ] ] 14console.log(target[0]) // -> [ '2/23', '天皇誕生日' ]

投稿2021/06/01 06:26

hope_mucci

総合スコア4447

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

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

ataru2222

2021/06/01 06:42

できました。 二次元配列の場合indexOfではなくfilter関数で取得するのですね。 教えていただきまして本当にありがとうございました。
int32_t

2021/06/01 06:44

値を1つ見つけるなら、ふつうは filter() ではなく find() を使います。
ataru2222

2021/06/01 08:43

ありがとうございます。 そこらへんの知識も弱いので調べながら使ってみます。
hope_mucci

2021/06/01 08:48

javascriptには他次元配列という概念が特にない(配列の中にはどんな型のオブジェクトも入る)ので、中のものを探すにはfilter関数のようなコールバック関数を引数に取る方法のほうが中身を探しやすいです。
hope_mucci

2021/06/01 08:54 編集

int32_tさん 今回は問題文から単一の要素を抜き出したいのかどうか分からなかったのでfilterを紹介しました。 と思っていたのですがそもそもindexOfで探して行き詰っていると冒頭に書いてありましたね。見落としていました。 > ALL findもfilterと同じような方法で使用できます。抽出結果が配列ではなく中のオブジェクトになるので結果が1つもしくはナシになることが保証されます。 (ただし抽出したい条件に当てはまる要素が複数ある場合は最初に見つかったものが結果として返ってくるところには注意してください) スマートに使い分けていただければ。
ataru2222

2021/06/01 09:29

詳しく解説していただきまして本当にありがとうございます(涙) 配列の操作を自由に使いこなせるように引き続き勉強していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問