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

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

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

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

Q&A

8回答

1277閲覧

Javescriptの初心者です 配列名を読み出したいです

sususususu_

総合スコア12

JavaScript

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

0グッド

2クリップ

投稿2019/06/14 15:50

編集2019/06/15 04:37

前提・実現したいこと

JSを勉強している初心者です

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

変数Aの中の名前の配列を呼び出したいです
forの中の
変数名 test → 中身はいろいろ変動します
仮に arraytest

arraytest[0]を呼び出したい場合
test[0]とかけば読みそうな気がするのですが
どうすればいいのでしょうか?

#追記
var arraytest= ["りんご", "バナナ"];
var test = "arraytest";
↑testの中身は状況で変わります

素人の頭の中としては
console.log(test[0])
でarraytest[0]の
りんごと出てほしいのです
console.log(test[0])でもだめだし
console.log(test+[0])でもだめだし
何をどう検索すれば出てくるのかわからず・・・といった感じです

変数内の文字列名の配列の0番を読み出すにはどうしたらよいか?
というかんじだとおもいます

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

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

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

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

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

kei344

2019/06/14 15:52

(質問文は編集できます)ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
sususususu_

2019/06/14 16:04

ありがとうございます  なにをどう説明していいのかわからないのですが追記してみたのですが 通じますでしょうか・・・
kei344

2019/06/14 16:05

こちらの環境では変更/修正が確認できませんでした。すみませんが、もう一度確認してもらえませんか?最近teratailで修正が保存されない事がたまにあるようなので・・・。また、説明の追加よりコードの追加をお願いします。
sususususu_

2019/06/14 17:07

var arraytest= ["りんご", "バナナ"]; var test = "arraytest"; ↑testの中身は状況で変わります 素人の頭の中としては console.log(test[0]) でarraytest[0]の りんごと出てほしいのです console.log(test[0])でもだめだし console.log(test+[0])でもだめだし 何をどう検索すれば出てくるのかわからず・・・といった感じです
退会済みユーザー

退会済みユーザー

2019/06/14 22:51 編集

その追加情報は元の質問文を編集して質問文の中に追記してください。コメント欄は読まない人もいます。 あと、変数 test には質問者さんとしては何を代入したつもりなのか書いてください。今のコードでは単なる文字列になってますが、実際に質問者さんが意図するところは違うのでは?
guest

回答8

0

なんか色んな方法で解決策が示されていますが、質問者の理解度と照らし合わせると過剰な方法だと思います。

まず、

var arraytest= ["りんご", "バナナ"];
var test = "arraytest";

この2行目はただtestという変数にarraytestという文字列を入れているだけで、1行目のarraytest変数(配列)と何の関係もないという事を理解していただきたいです。

そうすれば、

console.log(test[0])
でarraytest[0]の
りんごと出てほしいのです

この疑問に対しては無理というのが回答になります。
配列の変数名のarraytestと、文字列としてarraytestが入った変数名testの間に何の関係もないからです。

そこがスタート地点であり、基本です。
他の回答者さんの仰ってる解決策は応用的な内容になりますので、そこがわかってないと理解できないと思います。

投稿2019/06/15 05:26

gentaro

総合スコア8949

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

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

0

プロパティ

以下、質問のコメント欄から引用します。
この引用文は、後から読む人の為に、質問文を編集して追記して下さい(後述参照)。

JavaScript

1var arraytest= ["りんご", "バナナ"]; 2var test = "arraytest";

↑testの中身は状況で変わります

素人の頭の中としては

JavaScript

1console.log(test[0])

arraytest[0]
りんごと出てほしいのです
console.log(test[0])でもだめだし
console.log(test+[0])でもだめだし
何をどう検索すれば出てくるのかわからず・・・といった感じです

文字列の識別子で参照させる場合、オブジェクトのプロパティに埋め込む方法があります。

JavaScript

1'use strict'; 2var object = {foo: ['りんご','バナナ'], bar: ['東京','大阪']}; 3var propertyName = 'foo'; 4 5console.log(object[propertyName]); // ["りんご", "バナナ"]

eval()

ローカル変数名を文字列で参照する方法に eval() がありますが、eval is evilという格言があるように推奨されない関数です。

Function()

Function()ローカル変数を参照不可能な為、eval() よりは安全ですが、それでも実行可能な範囲は大きいので、熟練の方でなければお勧めできません。
Function() は変数の中で、グローバル変数のみを参照できます。

HTML

1<script> 2'use strict'; 3var foo = 'Hello'; 4var variableName = 'foo'; 5var result = Function('return ' + variableName)(); 6 7console.log(result); // "Hello" 8</script>

上記コードは任意のコードを実行可能であり、下記のように書き換えると、より安全になります。

HTML

1<script> 2'use strict'; 3var foo = 'Hello'; 4var variableName = 'foo'; 5var result = Function('return this')()[variableName]; 6 7console.log(result); // "Hello" 8</script>

しかし、衝突のリスクがあるグローバル変数は出来るだけ回避すべきでしょう。

後から読む人の為に

同様の問題を抱えた人は、あなたが解決した後にこの質問を読むかもしれません。
「コメントされた内容」を https://teratail.com/questions/edit/195030 から、編集して質問文に追記して下さい。

Re: sususususu_ さん

投稿2019/06/15 01:54

編集2019/06/15 01:56
think49

総合スコア18164

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

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

0

console.log(test[0])
でarraytest[0]の
りんごと出てほしいのです

それにどういう意味があるのか分かりませんし、XY 問題の Y を聞かれているような気もしますが、とりあえずそこだけ実現できるようにすると、test には文字列 "arraytest" を代入してもダメで、生の JavaScript オブジェクトへの参照 arraytest を渡す必要があります。

以下のような感じ。(console.log で表示してませんが test[0] で取得することに関しては同じことです)

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <meta charset="utf-8" /> </head> <body> <div id="div1"></div> </body> </html> <script type="text/javascript"> var arraytest = ["りんご", "バナナ"]; var test = arraytest; document.getElementById("div1").textContent = test[0]; </script>

結果は以下のようになります。

イメージ説明

投稿2019/06/15 05:51

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

一応できますけど、通常は配列名を変数に入れてアクセスするようなシチュエーションは無いと思います。
アクセス前には判断が入るはずなので、そこでアクセスすべき配列を指定すれば済む話です。

javascript

1var arraytest= ["りんご", "バナナ"]; 2var test = "arraytest"; 3console.log( Function('"use strict";return ('+ test +')')()[0] ); // りんご 4

投稿2019/06/14 22:02

shozi3

総合スコア691

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

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

0

単純に"arraytest"という文字代入しちゃってるだけではないですか?
""で囲むとその文字が入っちゃいます。

var arraytest= ["りんご", "バナナ"]; // var test = "arraytest"; 文字列を入れちゃってる var test = arraytest; // 配列を代入 console.log(test[0]) // "りんご"

投稿2019/06/15 09:02

bws

総合スコア98

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

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

0

オブジェクトを使った方がいいと思いますが、ブラウザで実行するコードで、グローバルに置くならこれでも動きます。

js

1var arraytest= ["りんご", "バナナ"]; 2var test = "arraytest"; 3console.log(window[test][0]);

投稿2019/06/15 06:09

Lhankor_Mhy

総合スコア36115

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

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

0

こういうことかな?

javascript

1var arraytest= ["りんご", "バナナ"]; 2var test = "arraytest"; 3console.log(eval(test)[0]);

※ eval の利用はあまりおすすめしませんが

投稿2019/06/14 20:53

takasima20

総合スコア7458

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

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

0

書かれていらっしゃるコードでいうなら

var test = "arraytest";

は文字列"arraytest"をtestに入れているだけなのでは…?

html

1<!DOCTYPE html> 2<html> 3<head> 4<title>サンプル</title> 5</head> 6<body> 7<input type="button" value="arraytest1のボタン" onclick="testFunc('aa')"><br> 8<input type="button" value="arraytest2のボタン" onclick="testFunc('bb')"> 9<script> 10function testFunc(str){ 11const arraytest1 = ["りんご", "バナナ"]; 12const arraytest2= ["なし", "イチゴ"]; 13const test = str === 'aa' ? arraytest1 : arraytest2; 14console.log(test[0]); 15} 16</script> 17</body> 18</html>

ざっくり期待するのはこんな感じの動作の事ですか?

投稿2019/06/14 19:17

編集2019/06/14 19:23
chiyochiyo

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問