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

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

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

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

Q&A

解決済

3回答

1751閲覧

配列の中身を数値に変換したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/04/28 08:45

前提・実現したいこと

中身が文字列の配列を、中身が数値の配列に変換したいのですが上手くいきません。

下に試したコードを記載するので、どこが間違っているのかを指摘していただきたいです。

また、どの時点で数値に変換するのが一般的なのかを知らないのでその点についても教えていただけると嬉しいです。

//別でバリデーションした、ユーザーが入力した半角数字のみが格納されます、この時点で文字列の配列になります var user_array = []; for ( var i = 1; i <= 6 ; i++ ) { user_array.push(document.getElementById('number' + i).value); } //出来上がる配列の例 ["1","2","3","4","5","6"] ["23","6","31","19","5","40"] //試したもの1、変換できずに文字列のまま user_array.map(function(element){ return Number(element); }); //試したもの2、変換できずに文字列のまま user_array.map( str => parseInt(str, 10) ); //試したもの3、エラーが出て配列に格納できず var user_array = []; for ( var i = 1; i <= 6 ; i++ ) { user_array.push(document.getElementById('number' + i).parseInt(value)); }

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

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

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

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

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

guest

回答3

0

user_array の要素それぞれを文字列から数値に変換して格納するのなら、 map() を使うだけでは足りません。

map() は、もとの配列を 変更しません
与えられた関数を、要素ごとに適用したあと、その戻り値を新しい配列として返します。

だから、 「試したもの1」や「試したもの2」で user_array が変更されることはありません。


js

1const returnValue = user_array.map(function(element){ 2 return Number(element); 3}); 4console.log(returnValue);

などと書けば、戻り値として変換後の数値の配列が出力されます。


user_array そのものを書き換えるには、

js

1user_array = user_array.map(function(element){ 2 return Number(element); 3});

とすると良いでしょう。

投稿2021/04/28 08:56

coolwind0202

総合スコア708

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

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

退会済みユーザー

退会済みユーザー

2021/04/28 09:00

ご丁寧にありがとうございます。 1番最初に回答してくださった方をベストアンサーにさせていただきました。
guest

0

ベストアンサー

与えられた関数を配列のすべての要素に対して呼び出し、その結果からなる新しい配列を生成します。

Array.prototype.map() - JavaScript | MDN

ということですので、元の配列は変化しません。
戻り値を受け取ってください。

投稿2021/04/28 08:51

Lhankor_Mhy

総合スコア36158

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

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

退会済みユーザー

退会済みユーザー

2021/04/28 08:58

ありがとうございます。 無事に解決いたしました。
guest

0

まず、mapメソッドは、破壊的メソッドではないということが、今回の勘違いかと。
(つまり、元は変化しないってこと)
mapは、各要素に対して、コールバックに指定した処理をした要素を返すことによって、
最終的に、全ての要素に対して同様の処理をした新たな配列を返すメソッドです。
よって、下記のようにする必要があります。

javascript

1//別でバリデーションした、ユーザーが入力した半角数字のみが格納されます、この時点で文字列の配列になります 2var user_array = []; 3for ( var i = 1; i <= 6 ; i++ ) { 4 user_array.push(document.getElementById('number' + i).value); 5} 6//出来上がる配列の例 7// ["1","2","3","4","5","6"] 8// ["23","6","31","19","5","40"] 9 10 11// 同じ変数に代入し直す 12user_array = user_array.map(element => Number(element)); 13 14// letなど、再代入ができない場合は下記 15let user_array = (() => { 16 const r = []; 17 for ( var i = 1; i <= 6 ; i++ ) { 18 r.push(document.getElementById('number' + i).value); 19 } 20 return r; 21})().map( e => Number(e)); 22 23 24// か、そもそも要素から値取る時点で数値にしちゃう 25var user_array = []; 26for ( var i = 1; i <= 6 ; i++ ) { 27 user_array.push( Number(document.getElementById('number' + i).value) ); 28}

ちなみに、上記構文は、共生できませんのでご注意ください。

投稿2021/04/28 08:56

miyabi_takatsuk

総合スコア9528

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

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

退会済みユーザー

退会済みユーザー

2021/04/28 09:00

ご丁寧にありがとうございます。 1番最初に回答してくださった方をベストアンサーにさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問