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

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

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

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

Q&A

解決済

2回答

1243閲覧

javascriptの配列について

xin

総合スコア17

JavaScript

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

0グッド

0クリップ

投稿2017/12/23 06:20

お世話になっております。
今JavaScriptの勉強のために「独習JavaScript」を進めています。
練習問題で分からないことが出てきたので質問させてください。

Q. 配列dataがあるとする。
この配列要素のうち、数値のみ合計値を計算し、アラートダイアログに表示させるプログラムをfor/in文を利用して作成しなさい。

A.

JavaScript

1var data = [1, 4, 5, 'string', 8] //配列を変数dataに格納 2var sum = 0; //sumという変数を作って初期値0を格納 3for (var num in data) { //dataという配列オブジェクトのプロパティを順に変数に格納 4 if (typeof data[num] == 'number') { //配列のプロパティのデータ型が数値の場合 5 console.log(data[num]); //1, 4, 5, 8と出力されることを確認 6 sum += data[num]; //変数sum(0)にプロパティを順に足していく 7 } 8} 9alert(sum); //18

配列はconsoleで結果を確認するために私が適当に決めました。
答えについては上記のように理解は出来たのですが、
console.log(data[num]);
を間違えて
console.log(num);
と入力した際に、consoleには0, 1, 2, 4と表示されました。
index番号を取得してきているようです。
index番号を取得する場合はconsole.log(num.index);ではないのかなと思ったのですが、
逆に全てundefinedと返ってきてしまいました、、、

for/in文の中で配列のindex番号を全てconsoleに表示する場合は
for (変数名 in オブシェクト名) 文 において
console(変数名);
ということなのでしょうか、、?

かなり初歩的な質問で申し訳ないのですが、混乱してきてしまったのでどなたかご回答お願いいたしますm(_ _)m

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

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

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

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

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

guest

回答2

0

ベストアンサー

var data = [1, 4, 5, 'string', 8];

というのは、こういうことです

var data = []; data[0] = 1; data[1] = 4; data[2] = 5; data[3] = 'string'; data[4] = 8;

配列のキーは0から始まる連続した整数と決まっています
整数がindexをもつことはありません

投稿2017/12/23 07:16

yambejp

総合スコア114572

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

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

0

JavaScriptのfor/in文は、オブジェクトのプロパティに対して反復処理をするという仕様です。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...in

配列におけるプロパティはもちろんインデックス番号です。
そのため、numにはインデックス番号が入ります。

どうしても値からインデックス番号を取得して表示させたい!という場合は、回りくどいですがこんな感じになります。

また、インデックス番号を取得するメソッドとしてはindexOfがありますが、これは「配列にある値のうち、該当する最初のもののインデックス番号を取得する」メソッドです。
これを強引に使うなら、回りくどいですがこんな感じになります。

for (let i in data) { console.log(data.indexOf(data[i])); }

ただし、配列の中に同じ値があると正しい結果が返ってきません。

投稿2017/12/23 07:04

編集2017/12/23 07:07
Udomomo

総合スコア1524

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問