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

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

新規登録して質問してみよう
ただいま回答率
85.35%
多次元配列

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

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

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

Q&A

解決済

2回答

1757閲覧

連想配列から複数の要素を抜き出し、新たに2次元配列を作りたいです

emi_ono

総合スコア84

多次元配列

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

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

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

0グッド

0クリップ

投稿2020/11/06 12:41

実現したいこと

連想配列から2つの要素だけ抜き出し、新たに2次元配列を作りたいです。
よろしくお願いします。

該当のソースコードに記述した連想配列"alltReservation"の中から"starttime"と"endtime"のみを配列の形で抜き出し、
[[a,b],[c,d],[e,f]]のような2次元配列にしたいです。

a,c,e → starttime
b,d,f → endtime
を意味します。

ここでは連想配列の中に3つの配列があるのですが、配列の数は変化します。

JavaScript

1const arr = []; 2for(var i=0; i < alltReservation.length; i++){ 3 const starttime = alltReservation[0].starttime; 4 const endtime = alltReservation[0].endtime; 5 }

このようにforで繰り返して、
あとはpushでarryに追加するのかな?
とも思ったのですが、、。ここから分からなくなってしまいストップしています。
どうぞよろしくお願いします。

該当のソースコード

JavaScript

1allReservation: [ 2 { 3 id: 1, 4 line_uid: 'aaaa', 5 name: 'abc de', 6 scheduledate: 2020-11-07T00:00:00.000Z, 7 starttime: '1604707200000', 8 endtime: '1604708400000', 9 menu: '0%5' 10 }, 11 { 12 id: 2, 13 line_uid: 'bbbb', 14 name: 'bcd ef', 15 scheduledate: 2020-11-07T00:00:00.000Z, 16 starttime: '1604736000000', 17 endtime: '1604736600000', 18 menu: '6' 19 }, 20 { 21 id: 3, 22 line_uid: 'cccc', 23 name: 'cde fg', 24 scheduledate: 2020-11-07T00:00:00.000Z, 25 starttime: '1604736000000', 26 endtime: '1604737200000', 27 menu: '0%5' 28 } 29]

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

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

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

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

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

guest

回答2

0

javascript

1const start_end=allReservation.map(x=>[x.starttime,x.endtime]); 2console.log(start_end);

投稿2020/11/06 12:58

yambejp

総合スコア116724

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

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

emi_ono

2020/11/06 14:42

yambejpさん、ありがとうございます! Array.prototype.map() の使い方がしっかり理解できていませんでした。しっかり確認しようと思います。
guest

0

ベストアンサー

forで繰り返して、あとはpushでarryに追加するのかな?とも思った

合っていますが、混乱する理由は、元の配列全体に着目しすぎているためです。
ループ内では 「配列要素」に着目します。

分からなくなってしまいストップしています

反復処理 では console.log を活用します。ループ内で値の変化を観測したり、結果を確認するだけで混乱を避けることができます。

javascript

1let arr = []; // result 2for ( let i=0, l=alltReservation.length; i<l; ++i ) { 3 // 教本によくあるパターンで配列要素を変数に代入すると console.log()を記述しやすい 4 let item = alltReservation[i]; 5 console.log( item ); // 反復される値の変化 6 7 //let starttime = item.starttime; 8 //let endtime = item.endtime; 9 10 // 分割代入 11 //let { starttime, endtime } = item; 12 13 // わざわざ、変数に格納する必要ないよね。 14 arr.push( [ item.starttime, item.endtime ] ); 15} 16console.log( arr ); // 結果を確認

この処理を Array.prototype.map() で書いたのが yambejp さんの回答です。

投稿2020/11/06 13:48

AkitoshiManabe

総合スコア5434

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

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

emi_ono

2020/11/06 14:38

AkitoshiManabeさん、解決できました。 分かりやすい説明ありがとうございます! 教えていただくと意外とシンプルだなぁ〜と理解出来るのですが、これを自分で考え出そうとすると難しいです。これからはconsole.logで一つずつ確認しながら進めていこうと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問