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

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

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

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

Q&A

解決済

1回答

2306閲覧

ローカル変数にグローバル変数の配列を代入したい。

kuroishi

総合スコア53

JavaScript

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

0グッド

1クリップ

投稿2019/04/23 11:08

編集2019/04/24 01:06

お世話になっております。今回は題名の通り、ローカル変数にグローバル変数の配列を代入したいと考えています。

Javascript

var i=0; var number2018 = ['abc', 'cdf']; var number2017 = ['fdsfsfa', 'hogehoge']; var number2016 = ['mioonono', 'irewrln']; for(var year = 2014; year<2030; year++){   var before_number = "number"+year;   var it_number = before_number.length;   console.log(it_number);   var selecter_number = "#"+year+"selecter";   while(i<it_number){  $(selecter_number).prepend('<iframe src="https://www.youtube.com/embed/'+before_number[i]+'?controls=2" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen class="youtube"></iframe>');  i++;   } }

HTML

<div id="2018selecter" class="youtube_frame_base" style="display: flex;"></div> <div id="2017selecter" class="youtube_frame_base" style="display: flex;"></div> <div id="2016selecter" class="youtube_frame_base" style="display: flex;"></div>

今回は今までHTML場でコピーアンドペーストしまくってyoutubeの一覧を作っていたものをもっと簡易的にしたいと考え、javascriptでfor文、while文を使用した記述方法に変更したいと考えました。

やりたいこととして、まずグローバル変数で各年度の動画の識別となる部分を配列で代入しておく。
for文内で各div要素内にコピーアンドペーストを自動的に記述を行なっていきたいという感じです。
問題はローカル変数であるbefore_numberです。この代入している値とグローバル変数の名前が一緒なのでこれで代入できてる?なんて考えていたのですが、代入ができていません。コンソールで確認したところ、変数内はしっかりと文字列が代入されているだけでした。

ここで質問なのですが、このローカル変数にグローバル変数にて定義した配列を代入することはどのように解決すればよいのでしょうか。
例 number2018=['abc','cdf']の値をローカル変数のbefore_numberの値が'number2018'になった時に、before_numberにグローバル変数のnumber2018の['abc','cdf']を代入したい。

よろしくお願いいたします。

修正後

var i=0; const number = {    '2018': ['abc', 'cdf'], '2017': ['fdsfsfa', 'hogehoge'], '2016': ['mioonono', 'irewrln'], } for(var year = 2016; year<2030; year++){ var result = String( year ); var before_number = number[result]; if(before_number==undefined){    break; } var selecter_number = "#"+year+"selecter"; for(var i=0; i<30; i++){    var atai = before_number[i];    if(atai==undefined){ break;    }    $(selecter_number).prepend('<iframe src="https://www.youtube.com/embed/'+atai+'?controls=2" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen class="youtube"></iframe>'); } }

さらに修正後

for(var year = 2016; year<2030; year++){      var result = String( year );      var before_number = number[result]; if(before_number==undefined){ break; }  var selecter_number = "#"+year+"selecter"; before_number.forEach(function( index ) { $(selecter_number).prepend('<iframe src="https://www.youtube.com/embed/'+index+'" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen class="youtube"></iframe>'); }); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

変数名に値を使うのではなく、連想配列として定義しましょう。

js

1const number = { 2 '2018': ['abc', 'cdf'], 3 '2017': ['fdsfsfa', 'hogehoge'], 4 '2016': ['mioonono', 'irewrln'], 5}

投稿2019/04/23 11:15

mather

総合スコア6753

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

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

kuroishi

2019/04/23 11:36

ご回答いただきありがとうございます! すみません、もう少し詳細に解説いただけると幸いです。なんとなくわかったつもりでいまいるので。 それをその後どのように活用していけばよいのでしょうか?
mather

2019/04/23 11:53

なんとなくわかったつもり、というのであれば、あなたの考える方法を実装してみてください。 どうしてもわからなかったときには何がわからないのかをコメントしてください。 はじめから回答をもらってたら自分で修正できなくなりますよ。
kuroishi

2019/04/23 13:44

ありがとうございました。 大変自分も今回は勉強になりました。 自分なりに完成した答えを改めて質問内容に記載させていただきました。 このコードみてここが悪いなどありましたらご指摘いただけると幸いです。 今後も日々精進したいと思います。
mather

2019/04/23 14:38

before_number.length 自体は使っていいと思いますよ。30というマジックナンバーが埋め込まれてしまうことで30個を超える配列には対応できなくなってしまいます。 さらに言えば、before_number が配列なので、forEach を使うとループするための i も不要なのでもっとシンプルになると思います。
kuroishi

2019/04/24 00:01

連想配列の場合、lengthは使えないとの記事がいくらか上がっていたのでその部分は破棄して、考えられるMAXの値30を代入しました。 forEach文を用いてこれからやってみようと思います!
kuroishi

2019/04/24 00:04

すみません、訂正後の話ですね。訂正後であればbefore_numberはただの配列なのでlengthが使えるっていうことですね。誤解していました。
kuroishi

2019/04/24 01:07

今まで何をやっていたんだレベルでかなり簡略できました。 本当に面白いですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問