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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

3回答

806閲覧

読み込んだテキストを配列で分割したい

jsrookie

総合スコア24

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2019/08/01 13:12

発生している問題、目指している形

例えば
a b c d e
f g h i j
の様なテキストを読み込んだ場合、行と空白で分割し、配列にしたいです。
まずは行で分割し、result2=[a b c d e, f g h i j]としています。
これをさらに空白で分割し、array0=[a, b, c, d, e]、array1=[f, g, h, i, j]のようにしたいのですが、arrayが上書きされてしまい最後の行の配列しか残りません。
arrayをarray0、array1のように数字で分けようとevalを使用したりしましたが上手くいきませんでした。

for (var i = 0; i <result2.length; ++i) { var array=result2[i].split(/\s+/); ←ここのarrayをiを使って変化させたいです。 console.log(array); }

仕方ないので最初は行数に応じて
var array0=result2[0].split(/\s+/);
var array1=result2[1].split(/\s+/);
var array2=result2[2].split(/\s+/);
のようにしていたのですが、なんとかしたいのでご教授お願いします。

該当のソースコード

JavaScript

1<body> 2<form name="test"> 3<input type="file" id="selfile"><br> 4<textarea name="txt" rows="10" cols="60" readonly></textarea> 5</form> 6 7<script> 8 9var obj1 = document.getElementById("selfile"); 10 11obj1.addEventListener("change",function(evt){ 12 13 var file = evt.target.files; 14 var reader = new FileReader(); 15 reader.readAsText(file[0]); 16 17 reader.onload = function(ev){ 18 //テキストエリアに表示 19 document.test.txt.value = reader.result.toLowerCase(); 20 var result2=reader.result.toLowerCase().split("\n"); 21 console.log(result2); 22 23 for (var i = 0; i <result2.length; ++i) { 24 var array=result2[i].split(/\s+/); 25 console.log(array); 26 } 27 } 28},false); 29</script> 30</body>

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

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

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

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

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

guest

回答3

0

(念のため)フラットな配列にまとめる例を

javascript

1var array = []; 2for (var i = 0; i <result2.length; i++) { 3 array = array.concat(result2[i].split(/\s+/)); 4 console.log(array); 5}

投稿2019/08/01 14:19

takasima20

総合スコア7458

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

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

0

js

1 var result3=[]; 2 for (var i = 0; i <result2.length; ++i) { 3 result3.push(result2[i].split(/\s+/)); 4 } 5 console.log(result3);

投稿2019/08/01 13:39

kei344

総合スコア69398

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

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

0

ベストアンサー

同じ変数 array に入れてしまっているのが原因ですね。
まず目的の形の認識ですが、

array0=[a, b, c, d, e]、array1=[f, g, h, i, j]のようにしたい

こちらは以下の形を想定してよろしいでしょうか。

[[a, b, c, d, e], [f, g, h, i, j]]

いわゆる二重配列と言うものになります。
これでよければ、以下のように実装すれば可能です。

JavaScript

1var array = []; 2for (var i = 0; i <result2.length; ++i) { 3 array.push(result2[i].split(/\s+/)) 4}

最初に array と言う空の配列を用意して、スペースで分割した結果の配列を array に入れています。
試しに出力すると以下のような感じです。

JavaScript

1console.log(array[0]) \ [a, b, c, d, e] 2console.log(array[0][0]) \ a 3console.log(array[1][2]) \ h

投稿2019/08/01 13:43

nerianighthawk

総合スコア544

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問