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

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

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

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

Q&A

解決済

3回答

1975閲覧

【JavaScript】スペースを含む数字の文字列が二つ、要素として入っている配列を、整数化した上で1つづつの整数に分け、配列に格納する方法

moritat-222

総合スコア19

JavaScript

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

0グッド

0クリップ

投稿2020/04/24 23:34

編集2020/04/25 00:42

前提・実現したいこと

JavaScriptで、

JavaSCript

1 2var str = ["1 2", "3 4"];

という文字型の配列が与えられている時に、
これを整数型にした上で

JavaScript

1var num = [1, 2, 3, 4];

とバラバラに分けて、配列に格納する方法を教えていただきたいです。

試したこと

str[0]をスペースで区切り、新しい配列firstArryに格納。
整数化して、新しい配列num_firstArryに格納。

str[1]をスペースで区切り、新しい配列secondArryに格納。
整数化して、新しい配列num_secondArryに格納。

num_firstArryとnum_secondArryを結合し、新しい配列resulrArryを作成。

JavaScript

1 2 var firstArry = str[0].split(/\s/); 3 var num_firstArry = firstArry.map(function(str){ 4 return Number(str); 5 }); 6 7 var secondArry = str[1].split(/\s/); 8 var num_secondArry = secondArry.map(function(str){ 9 return Number(str); 10 }); 11 12 var resultArry = num_firstArry.concat(num_secondArry); 13

この方法で、一応求めていた操作はできたのですが、このやり方よりも効率の良いやり方があるのではないか?
と思い質問させていただきました。

ご回答のほど、よろしくお願いいたします。

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

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

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

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

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

AkitoshiManabe

2020/04/25 00:31

解決前には 文字型の配列を ["1 2", "3 4"]; と訂正しておいたほうがよいですね。 意を組んで回答が上がっていますがコード上は SyntaxError になるはずです。
moritat-222

2020/04/25 00:43

修正依頼ありがとうございます。 修正いたしました!
guest

回答3

0

ベストアンサー

こんにちは
配列のflat()メソッドを使って、以下でどうでしょう?

javascript

1var resultArry = str.map(e => e.split(/\s/)).flat().map(e => +e);

投稿2020/04/25 00:48

jun68ykt

総合スコア9058

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

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

moritat-222

2020/04/25 01:01

回答ありがとうございます! 初歩的な質問で申し訳ないのですが、このコードで書かれている e は何を指しているのでしょうか? JavaScriptの引数でeと書かれている時はイベントの略であることが多いとは認識しているのですが、ここでイベントが登場するのもあまりしっくり来ないので別の何かの略だとは思うのですが・・・! 回答よろしくお願いいたします。
jun68ykt

2020/04/25 01:16

コメントありがとうございます。 このコードでは、配列のmapメソッド https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map を2箇所で使っています。 上記のドキュメントのとおり、map には引数として関数を渡しますが、その関数の引数には配列の各要素が入ってきます。なので、引数の名前を element (要素)の頭文字の e にしています。 はじめの str.map(e => e.split(/\s/)) によって、str の各要素の文字列を、スペース区切りで分割した配列で置き換えた、以下のような配列 [ ['1', '2'], ['3', '4'], ['55', '66'], ['777', '888'] ] が得られます。 ただし、 map に渡す関数の引数名を e にするのが、いつもよいとは限りません。このご質問の場合でいえば、2つの数字をスペースで結合した '1 2' という形式の文字列が入る変数を、たとえば、pair という変数名にするのが慣例になっているのでしたら str.map(pair => pair.split(/\s/)) にしたほうが読みやすくなります。なので、e は適宜、変えればよいかと思います。
moritat-222

2020/04/25 01:38

回答ありがとうございます。 eはelementの略だったんですね。納得いたしました。 resultArry = str.map(e => e.split(/\s/)).flat() までの時点で ['1', '2', '3', '4','55', '66', '777', '888'] という配列が得られることまでは理解できました。 最後の .map(e => +e); という処理では何を行っているのか教えていただきたく思います。 おそらくここで文字列を整数化する処理をされていると思うのですが、 (e => +e)の処理でどう整数化しているのか、検索してみても理解できませんでした・・・。 ご回答のほど、よろしくお願いいたします。
moritat-222

2020/04/25 01:55

ありがとうございます! 「単項算術演算子 (+、-、++、--) はすべて、必要に応じてオペランドを数値に変換する」 ということですね。 大変勉強になりました!
jun68ykt

2020/04/25 01:56

どういたしまして???? > 大変勉強になりました! とのことでよかったです????
guest

0

最初に全部 ” ”でくっつけて一つの文字列にしておけば楽だと思いますよ

js

1var str = ["1 2", "3 4", "55 666  7"]; 2let num = str.join(" ") //" 1 2 3 4 55 666  7" 3 .split(/\s+/) // [ '1', '2', '3', '4', '55', '666', '7' ] 4 .map(num => parseInt(num));

投稿2020/04/25 00:02

編集2020/04/25 00:08
oikashinoa

総合スコア2826

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

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

moritat-222

2020/04/25 01:55

ありがとうございます。とてもわかりやすかったです。
guest

0

基本的にそのやり方でいいんではないかと。
んで、配列を相手にするんだから、ループにして処理しよう

投稿2020/04/24 23:42

編集2020/04/24 23:43
y_waiwai

総合スコア87774

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

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

moritat-222

2020/04/25 01:17

回答ありがとうございます。 var firstArry = lines[0].split(/\s/); の代わりに for(var firstArry of lines){ firstArry = lines[0].split(/\s/); } で処理した方が良い、ということでしょうか? 整数化の処理でループを作成使用としたら「don't make function within loop 」のエラーが出てしまったのでこちらの処理のことではない、と思うのですが・・・。 for(var num_firstArry of firstArry){ firstArry.map(function(str){ return Number(str); }); もしご回答の意図をくみ違えていたらご指摘ください。
y_waiwai

2020/04/25 01:24

str の方をループに。 for(var s in str){ var Arry = s.split(/\s/); ... } というふうに2つ並べてたのがひとつでできます あなたなりに、理解できる範囲でいろいろやっていってみてください。 まあ、他の回答でより短くできるコード(あるいはより適切なコード)が提示されてるので、それも理解できればいいですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問