🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

2回答

1562閲覧

javascript 配列の問題

midori_saki

総合スコア29

JavaScript

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

0グッド

0クリップ

投稿2019/09/16 09:48

編集2019/09/16 11:00

javascriptの教科書にある問題を学習していたのですが、結果がでません。
また、「検証」でエラーが出ていたのですが、理由がわかりませんでした。
どこを直したらいいか、ご教示お願いします。
合計値から平均値を出す問題です。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>課題</title> </head> <body> <script> var data1 = [59, 39, 100, 2, 15, 40, 84, 97]; var data2 = [63, 18, 64, 97, 50, 98]; for(i=0; i < data1.length; i++){ sum1 += data[i]; } document.write(sum1); for(j=0; j <= data2.length; j++){ sum2 += data2[j]; } document.write(sum2); ave = (sum1 + sum2)/(data1.length+data2.length); document.write(ave); </script> </body> </html>

修正したコード

<script> const data1 = [59, 39, 100, 2, 15, 40, 84, 97]; const data2 = [63, 18, 64, 97, 50, 98]; /* 以下に課題処理を追加 */ let sum1; for(i=0; i < data1.length; i++){ sum1 += data1[i]; } document.write(sum1); let sum2; for(j=0; j < data2.length; j++){ sum2 += data2[j]; } document.write(sum2); ave = (sum1 + sum2)/(data1.length+data2.length); document.write(ave); </script> </body> </html>

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

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

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

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

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

kei344

2019/09/16 09:50

(質問文は編集できます)質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。 「エラーが出ていた」では無く、エラー文を具体的にコードブロックで質問文に追記ください。
guest

回答2

0

ベストアンサー

何点か修正点がありそうです

1.
sum1、sum2の変数はfor文の外で宣言しておく。

2.
data1のループ内で、data[i] ではなく data1[i]

3.
data2のループで j <= data2.length ではなく j < data2.length
このままだと配列要素数を越えてしまって計算できません。

あとエラーになるモノではありませんが、変数宣言では「var」ではなく、
固定値のdata1、data2は「const」、変数のsum1、sum2は「let」で宣言するのがいいと思います。

投稿2019/09/16 10:12

q_sane_q

総合スコア610

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

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

midori_saki

2019/09/16 10:45

ご指摘ありがとうございました! 頂いた内容を修正したのですが、今度は、NaNがでてしまいまして... 他は、どこに間違いがあるのでしょうか?
q_sane_q

2019/09/16 10:53

このスクリプトでNaNになりそうなところというとdata2のループの判定(上記、3.の内容)が直っていないパターンがまず考えられますがそこはどうでしょうか? そうでなければ、質問に現在のHTMLを追記して頂けると何かわかるかもしれません。
midori_saki

2019/09/16 11:01

追記させていただきました。 お手数ですが、よろしくお願いします。
q_sane_q

2019/09/16 11:03

sum1、sum2は宣言時に0で初期化が必要と思います。
midori_saki

2019/09/16 11:12

ありがとうございます! できました! また、わからないところがありましたら、教えてください。
q_sane_q

2019/09/16 11:18

今回は、ループをforを使ってやっていますが、JavaScriptの配列にはいろいろ関数があり、 例えばループ処理なら『forEach』、また今回のように加算していくには『reduce』などが使えたりします。 検索すると情報がたくさんあると思いますので、ゆくゆくはそちらも使用していくといいと思います。
midori_saki

2019/09/16 11:24

はい!とても参考になります。
guest

0

for(i=0; i < data1.length; i++){
sum1 += data[i];
}
の部分
data[i]がdata1[i]ではないでしょうか?

投稿2019/09/16 10:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

midori_saki

2019/09/16 10:45

ご指摘ありがとうございました! 頂いた内容を修正したのですが、今度は、NaNがでてしまいまして... 他は、どこに間違いがあるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問