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

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

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

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

Q&A

解決済

5回答

1205閲覧

javascript:配列について

rails_ruby

総合スコア87

JavaScript

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

0グッド

1クリップ

投稿2019/04/21 09:45

編集2019/04/21 12:38

#実現したいこと
下記のコードでは、30分ごとに時間に関する配列を生成しているのですが、配列内のデータを直書きせずにfor文などで生成できる方法があれば知りたい。

js

1let datetime = ["00:00","00:30","01:00","01:30","02:00","02:30","03:00","03:30","04:00","04:30", 2 "05:00","05:30","06:30","07:00","07:30","08:00","08:30","09:00","09:30","10:00", 3 "10:30","11:00","11:30","12:00","12:30","13:00","13:30","14:00","14:30","15:00", 4 "15:30","16:00","16:30","17:00","17:30","18:00","18:30","19:00","19:30","20:00", 5 "20:30","21:00","21:30","22:00","22:30","23:00","23:30"]

#現状
現状では、一つ一つ手打ちで30分ごとに配列の要素数を足しています。

#やりたいことのイメージ
下記のような感じ、for文で30分ごとの配列を生成できたらしたい。

js

1let datetime = [ ];//初期化 2for(let i=0;i<47;i++){ //30分ごとに繰り返し時間を生成する処理 3 datetime[i+30]; 4}

実行結果

js

1["00:00","00:30","01:00","01:30","02:00","02:30","03:00","03:30","04:00","04:30", 2 "05:00","05:30","06:30","07:00","07:30","08:00","08:30","09:00","09:30","10:00", 3 "10:30","11:00","11:30","12:00","12:30","13:00","13:30","14:00","14:30","15:00", 4 "15:30","16:00","16:30","17:00","17:30","18:00","18:30","19:00","19:30","20:00", 5 "20:30","21:00","21:30","22:00","22:30","23:00","23:30"]

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

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

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

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

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

BluOxy

2019/04/21 09:56 編集

質問内容がよく分かりませんでした。 書かれているコードが30分毎に配列を生成しているようには思えません。 for文で何をアウトプットすれば解決なんでしょうか。
m.ts10806

2019/04/21 10:26

現在どのようにつくられているのでしょうか
rails_ruby

2019/04/21 12:38

やりたいことについて、説明を追記しました。
guest

回答5

0

Dateオブジェクトから時刻を取得すると時刻のデータが作れます。
注意点として、分や秒が1桁の場合は0104のようにゼロパディングをする必要があります。

javascript

1window.onload = function () { 2 let date = new Date(2019, 10, 21); 3 for (let i = 0; i < 47; i++) { //30分ごとに繰り返し時間を生成する処理 4 let hour = zeroPadding(date.getHours()); 5 let minute = zeroPadding(date.getMinutes()); 6 console.log(hour + ":" + minute); 7 date.setMinutes(date.getMinutes() + 30); 8 } 9} 10 11function zeroPadding(value) { 12 return value < 10 ? '0' + value : value; 13}

投稿2019/04/21 12:53

BluOxy

総合スコア2663

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

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

0

js

1const arr = new Array( 24 ).fill( null ).map( ( _, i )=> i ).reduce( ( ar, i2 )=> ( ar.push( i2, i2 ), ar ), [] ).map( ( v, i3 )=> ( '0' + v ).slice( -2 ) + ':' + ( i3 % 2 ? 3 : 0 ) + 0 ); 2console.log( arr );

【MDN】Array.prototype.fill(), Array.prototype.map(), Array.prototype.reduce(), Array.prototype.push()


追記:

もう少し短くなるかと思ったがそうでもなかった。

js

1const arr = new Array( 24 ).fill( null ).reduce( ( s, c, i )=> ( c = ( '0' + i ).slice( -2 ), s + `${c}:00,${c}:30,` ), '' ).split( ',', 48 ); 2console.log( arr );

投稿2019/04/21 14:46

編集2019/04/21 16:21
kei344

総合スコア69364

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

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

0

普通のプログラマは、提示された配列を手作業で打ち込むのが面倒なので、プログラムを書きます。
すでに手間を惜しまず手作業で配列を書き上げたのなら、そのままそれを使うべきです。
ここに回答を示された誰よりも、あなたの書き上げた配列、それが最速です。

解りやすいようにプログラムを書いているのかもしれませんが、
プログラムの文字数があなたの書き上げた配列の文字数と肩を並べるくらいなら、
素のままを使うのが適しています

面倒なことは teratail に質問しておけば、翌朝にはコピペで完成!と思っているようで、すでに向上心のない人間になっていますよ。
それに「配列を生成できたらしたい」とあなたが示したコードが、あまりにも幼稚過ぎて絶句した。
papinianus さんにコピペで使われてしまったけれど、配列の初期化で示したコードが理解できなくて形を変えて質問したようだけれど、そういう体質を今から変えなさい。
複数アカウントも1つにしなさい。
そういうの、みえみえだから。

投稿2019/04/21 19:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

javascript

1console.log( 2 Array(24).fill(0).reduce((a,b,c)=>(b=('0'+c).slice(-2),[...a,b+':00',b+':30']),[]) 3)

投稿2019/04/21 15:49

papinianus

総合スコア12705

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

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

papinianus

2019/04/22 09:53

コピペして大変申し訳ありませんでした。 ベストアンサーになってしまったので残置します
退会済みユーザー

退会済みユーザー

2019/04/22 11:45

かまへん、かまへん。なんかの時の貸ね^^;
guest

0

ちょっと雑になってしまいましたが、Dateを利用して0時0分0秒にセットして30分ずつ加算した時間を出す・・・というやり方もあるかなと。

js

1let dt = new Date(); 2dt.setHours(0); 3dt.setMinutes(0); 4dt.setSeconds(0); 5const addMin = 30; 6console.log(dt.getHours()+":"+dt.getMinutes()); 7let flg = true; 8while(flg){ 9 dt.setMinutes(dt.getMinutes()+(30)); 10 console.log(dt.getHours()+":"+dt.getMinutes()); 11 if(dt.getHours()+":"+dt.getMinutes() == '23:30'){ 12 flg = false; 13 } 14}

既に回答出ている通り、0埋めはしてくださいね。

投稿2019/04/21 14:06

m.ts10806

総合スコア80765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問