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

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

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

JavaScript

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

Q&A

解決済

2回答

1066閲覧

Javascriptで二次元配列の各要素に全て計算処理をしたいです。

hachimitu_remon

総合スコア14

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

JavaScript

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

0グッド

0クリップ

投稿2020/01/11 13:05

Javascript

1[ 2 ["1", "2", "3", "4"], 3 ["5", "6", "7", "8"], 4 ["9", "10", "11", "12"] 5]

このような二次元配列の各行の、
数字全ての二乗和の平方根を計算して、新しい配列を作りたいです。

結果として得たい形は、

Javascript

1[ 2 一行目の計算結果, 3 二行目の計算結果, 4 三行目の計算結果 5]

というものです。

二乗和の平方根を出すためのメソッドとしてMath.hypot()があることを知り、
それとforEach文を組み合わせて試したのですが、うまくいきません。
以下は試したコードです。

Javascript

1var sample = array.forEach(function( value ) { 2 Math.hypot( value ); 3}); 4console.log(sample);

コンソールしてみるとundefinedと出てきます。

どなたかご教示のほど、よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

array.forEach()の返り値はundefinedですので表示は正しいです
希望されている動作をするのはforEachではなくmapかと思います

投稿2020/01/11 13:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hachimitu_remon

2020/01/12 08:21

ご回答ありがとうございます。 array.mapで試してみたら、配列は出来ました。 しかし結果の配列の要素が全てNaNになってしまっていて、その問題を解決しようと奮闘しています。 アドバイスを頂けると嬉しいです。
hachimitu_remon

2020/01/12 11:34 編集

AkitoshiManabeさん、お返事ありがとうございます。 もう一つの質問によって数値化は成功したのですが、それでもなお結果はNaNとなってしまっています。 おそらくmapメソッドを二次元配列に適用する際にどこかでミスをしているのかと思い、今試行錯誤しています。
hachimitu_remon

2020/01/14 04:29

retlatさん、お返事ありがとうございます。 おっしゃる通りでした。
guest

0

ベストアンサー

javascript

1samples = array.map( row => { 2 3 console.log( row ) // rowの変化を確認#1 4 row = row.map(Number); // 数値化 5 console.log( row ) // rowの変化を確認#2 6 7 let hypot = /* ヒント:二乗和の平方根を返却 */ 8 console.log( hypot ) // 結果を確認 9 10 return hypot; 11})

Math.hypot( n0, n1, n2, ... )Math.max()Math.min() のように引数ごとに数値を与える関数ですが、apply( null, likaAry ) を使うことで対応できます。


コードは 意図した結果を得られるように書くことを重視し、複数行に渡って示しました(短く書き直すのは後から出来ます)。

投稿2020/01/12 11:31

編集2020/01/12 11:33
AkitoshiManabe

総合スコア5432

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

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

hachimitu_remon

2020/01/12 12:21

AkitoshiManabeさん、ご回答ありがとうございます。 ヒントの通りに今、コードを考えているのですが、 let hypot = の後には関数を宣言するのですよね? 関数自体の形ははなんとなくわかってきたのですが、私の勉強不足でその関数をどう配列の各値に作用させるのかが分からず、混乱してしまっています。。 関数は、 function() { var y = 0; var length = arguments.length; for (var i = 0; i < length; i++) { if (arguments[i] === Infinity || arguments[i] === -Infinity) { return Infinity; } y += arguments[i] * arguments[i]; } return Math.sqrt(y); }; のような感じでしょうか。 Math.hypot()のポリフィルから持ってきて、やっていることは分かるのですが。。
AkitoshiManabe

2020/01/12 16:33

リンク先 のMDNでは、``Math.min.apply(null, arg)`` みたいに利用されていませんか?
hachimitu_remon

2020/01/14 04:15

AkitoshiManabeさん、お返事ありがとうございます。 ``Math.min.apply(null, arg)`` のようなコードでとりあえず計算結果は正確に出せました。 まだ、配列内に重複が発生してしまう問題などがありますが、.applyを使う事で大きく進展はしたので、 ベストアンサーを付けさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問