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

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

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

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

Q&A

解決済

5回答

666閲覧

テキストに入力された値を取得する複数の変数宣言をfor文でまとめたい

mi_mi

総合スコア19

JavaScript

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

0グッド

0クリップ

投稿2018/10/22 06:12

javascrip

1 var num1v = document.getElementById("num1").value; 2 var num2v = document.getElementById("num2").value; 3 var num3v = document.getElementById("num3").value; 4 var num4v = document.getElementById("num4").value; 5 var num5v = document.getElementById("num5").value; 6 var num6v = document.getElementById("num6").value; 7 var num7v = document.getElementById("num7").value; 8 var num8v = document.getElementById("num8").value; 9 var num9v = document.getElementById("num9").value; 10 var num10v = document.getElementById("num10").value;

javascript

1 for ( var i = 1; i < num.length +1 ; i++ )//上記をfor文でまとめたい 2 { 3 var y = 'var num'+[i]+'v'+ '= document.getElementById("num'+[i]+'").value;' 4 console.log(y);//コンソールログには上記の通りに出力されるが、正しく宣言されていないようで値の取得ができない 5 } 6 7 console.log(num1v);//for文を使うとエラーになってしまう。長いが、上記で宣言すると問題なく取得する事ができる。

・やりたい事
テキストに入力された値を取得する変数宣言が長いのでfor文でまとめたい

・やってみた事
for文で宣言を作成しようとしたのですが、正しく宣言されていないようで値の取得ができない。
forと配列等があまり理解できていないのかもしれません。

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

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

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

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

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

jun68ykt

2018/10/22 07:23

こんにちは。num1, num2 ... をプロパティとするオブジェクトを作成する回答を書こうと思ったのですが for 文を使わない回答もアリでしょうか?
mi_mi

2018/10/22 07:38

ありです。 宣言が長くなってしまったのでまとめて宣言をしたいので、 色々な方法を見てみたいです。 var num1v = document.getElementById("num1").valueの num1vの部分も使用できるようにしたいです。 例えばconsole.log(num1v)で値が表示されるような。 初心者のイメージとしては本当に最初に記載した通りのfor文で できるかなと思ったのですが、難しいです。 皆さんに教えていただいた方法を試してみています。
jun68ykt

2018/10/22 08:16

ご返信ありがとうございます。コード例を回答しました。
guest

回答5

0

よほど理由がない限り、「ループでまとめて使う変数群」は配列を使って表現するのが適切です。

JavaScriptでは、状況によっては「プログラムで指定した名前の変数」を造るのが不可能なこともあります。

投稿2018/10/22 06:19

maisumakun

総合スコア145184

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

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

mi_mi

2018/10/22 06:28

そうなんですね。ありがとうございます。 もしご面倒でなければ、どのようなコードになるか教えていただけませんでしょうか? 自分で思いつくものが上記以外にないので教えていただけると幸いです。
maisumakun

2018/10/22 06:35

x_xさんが示しているコードが、ちょうどそんな感じです。
mi_mi

2018/10/22 14:16

maisumakunさんありがとうございました。
guest

0

変数numが不明だったので固定値にしてますが

JavaScript

1 var y = []; 2 for ( var i = 1; i <= 10 ; i++ ) { 3 y.push(document.getElementById('num' + i.toString()).value); 4 } 5 6 console.log(y);

投稿2018/10/22 06:23

x_x

総合スコア13749

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

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

mi_mi

2018/10/22 14:17

x_x さんありがとうございました。 配列となって取り出せるので、とても便利ですね。 pushの使い方が分かっていなかったので今回とても勉強になりました。
guest

0

ベストアンサー

こんにちは。

質問への追記・修正にて、当方からの

jun68ykt 2018/10/22 16:23

こんにちは。num1, num2 ... をプロパティとするオブジェクトを作成する回答を書こうと思ったのですが for 文を使わない回答もアリでしょうか?

との確認に

mi_mi 2018/10/22 16:38
ありです。 宣言が長くなってしまったのでまとめて宣言をしたいので、 色々な方法を見てみたいです。 ...

とのご返答を頂きましたので、上記の趣旨のコード例を以下に回答します。

javascript

1const values = Array.prototype.reduce.call( 2 document.getElementsByTagName('input'), 3 (obj, input) => { 4 obj[input.id] = input.value; 5 return obj; 6 }, 7 {} 8); 9

上記のように values を作成すると、 たとえば values.num1 することで、 id が "num1" の要素の value 属性の値を取り出せます。

以下は、上記のコードを確認するためのサンプルです。(HTMLの部分はJavaScriptの動作確認できるように適当なものを作成しました)

参考になれば幸いです。

追記1

まとめるオブジェクトとして、Map を使うと、上記のコードで Array.prototype.reduce に渡す関数を、以下のように少し短く書けます。

javascript

1const values = Array.prototype.reduce.call( 2 document.getElementsByTagName('input'), 3 (m, input) => m.set(input.id, input.value), 4 new Map() 5);

追記2

質問への追記・修正のご返信に、

mi_mi 2018/10/22 16:38
...
var num1v = document.getElementById("num1").valueの num1vの部分も使用できるようにしたいです。 例えばconsole.log(num1v)で値が表示されるような。

とありましたが、以下のようにすると、 console.log(num1v);id="num1" の要素の value が表示されるようにできます。

javascript

1Array.prototype.forEach.call( 2 document.getElementsByTagName('input'), 3 input => { 4 window[`${input.id}v`] = input.value; 5 } 6); 7 8console.log(num1v); 9console.log(num10v);

ただし、上記のようにすると「いちおう出来ます」というだけで、グローバルオブジェクト(ブラウザでは window)のプロパティに、値を保存をしておくようなことは、あまりやりません。

追記3

蛇足ではありますが、もうひとつお節介ついでに、「こうすればまとめるプログラムを書かなくても、最初からまとまっているといえるのでは?」という例を挙げます。

以下のように<input>要素を <form> でくくっておき、<input> には id ではなく name 属性を付加しておきます。

html

1<form> 2 <input name="num1" value="10" /><br /> 3 <input name="num2" value="11" /><br /> 4 <input name="num3" value="12" /><br /> 5 <input name="num4" value="13" /><br /> 6 <input name="num5" value="14" /><br /> 7 <input name="num6" value="15" /><br /> 8 <input name="num7" value="16" /><br /> 9 <input name="num8" value="17" /><br /> 10 <input name="num9" value="18" /><br /> 11 <input name="num10" value="19" /> 12</form>

上記のようにすると、以下で値が取り出せます。

javascript

1const f = document.forms[0]; 2 3console.log(f.num1.value);  // => 10 4console.log(f.num10.value); // => 19

投稿2018/10/22 08:11

編集2018/10/22 13:11
jun68ykt

総合スコア9058

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

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

mi_mi

2018/10/22 14:25

jun68yktさん沢山ご回答いただきありがとうございました。 ご丁寧にサンプルまで!初心者なのでサンプルをいただけると大変嬉しいです! name属性で取り出す方法全く知らなかったので驚いています。 全部試してみています。動いて嬉しいです!
jun68ykt

2018/10/22 14:35

どういたしまして、お役に立てて嬉しいです ????
guest

0

こんなかんじ。でも、場合によっては殴られるレベルのコード。

html

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="utf-8"> 5</head> 6<body> 7 8<div id="num1">NUM1</div> 9<div id="num2">NUM2</div> 10<div id="num3">NUM3</div> 11 12<script> 13 var num = 3; 14 for (var i = 1; i <num+1 ; i++ )//上記をfor文でまとめたい 15 { 16 var valName = "num" + i + "v"; 17 var id = "num" + i; 18 var exp = "var " + valName + " = document.getElementById('" + id + "').textContent;" 19 eval(exp); 20 console.log(eval(valName)); 21 } 22 23</script> 24</body> 25</html>

なので、やっぱりこんなかんじ

javascript

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="utf-8"> 5</head> 6<body> 7 8<div id="num1">NUM1</div> 9<div id="num2">NUM2</div> 10<div id="num3">NUM3</div> 11 12<script> 13 var elems = []; 14 var num = 3; 15 for (var i = 1; i <num+1 ; i++ )//上記をfor文でまとめたい 16 { 17 var id = 'num' + i; 18 elems[i] = document.getElementById(id).textContent; 19 console.log(elems[i]); 20 } 21</script> 22</body> 23</html>

変数を動的に追加すると、コードにgrepかけたときに(変数を調べたときに)、検索に引っかからないので、場合によっては吐血する羽目になります。

投稿2018/10/22 06:36

編集2018/10/22 06:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mi_mi

2018/10/22 14:20

ppnさんありがとうございました。 最初に殴られるレべルのコードを書いていただいたので、 私にはとてもわかりやすかったです。皆さんに色んな書き方を教えていただいて嬉しいです。
guest

0

たとえば規則性が保証できない場合または
一部だけ処理したい場合はこんな感じで

var items = ['num1','num2','num3','etc']; var vals = []; for(var x in items) { vals[x] = document.getElementById(x).value; }

投稿2018/10/22 14:42

takasima20

総合スコア7458

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

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

takasima20

2018/10/22 14:43

ありゃ。解決済みでしたか。失礼 :-)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問