JavaScriptを勉強しています。下記のように文字列を改行含んで書いてある場合に、2次元配列に

var cols = [
[1,1,1,1,1,1,1,1]
[2,2,2,2.....]
];
のように格納したいです。下記のようにsplitすれば出来るかと思ったのですが、出来ませんでした。(valueには<textarea>の中身が格納されている)
var cols = value.split('¥n');
どのようにすれば、2次元配列に格納出来るでしょうか?

<textarea>
11111111
22222222
33333333
</textarea>

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/11/17 22:30:04
  • 終了:2011/11/20 09:18:31

ベストアンサー

id:pacochi No.1

ぱこち回答回数247ベストアンサー獲得回数1132011/11/17 23:03:09

行数と文字列の長さ分だけそれぞれ for で回していって、charAt() で一文字ずつ格納するのが正攻法かなと思いました。

var rows = value.split('\n');
var cols = [];

for (var i = 0; i < rows.length; i++) {
    cols[i] = [];
    for (var c = 0; c < rows[i].length; c++)
     cols[i][c] = rows[i].charAt(c);
}

http://jsfiddle.net/9vXVK/1/

空文字で split するとちょっと楽できそうです。

for (var i = 0; i < rows.length; i++)
 cols.push(rows[i].split(''));

http://jsfiddle.net/9vXVK/

他1件のコメントを見る
id:pacochi

(1)split("\n")で1行ごとに配列に入れられそうなのですがなぜ格納出来ないでしょうか?

行ごとに配列に入れるところでも問題があったのですね。
おそらく、質問文のコードで「¥」が制御文字の「u+005C」ではなく、単なる円記号の「u+00A5」になっているためだと思います。
「¥」を「\」にすれば、cols (私の回答では rows にあたるところ) に ['11111111'],['22222222'],['33333333'],[''] と入りました。

日本語入力ソフトによっては、キーボードで「\」を打った時点でそうなってしまうみたいです。
http://aoyagikouhei.blog8.fc2.com/blog-entry-41.html

(2)空文字で split するとなぜcolsの中身が2次元配列になるのでしょうか?

split 単体では二次元配列にはなりません。
最初に作った配列 (行ごとに区切ったもの) を、さらに文字ごとに分割して二次元配列にしています。

分割に空文字を指定すると一文字ずつ配列に入るのは、そういう仕様だからです。

例えば、 separator が空文字列ならば、文字列は不可分の文字に分割される;

15.5 String オブジェクト (String Objects)
2011/11/18 08:45:33
id:koime_ryokutya

詳しい回答ありがとうございます。理解出来ました。

2011/11/20 09:18:06

その他の回答(1件)

id:pacochi No.1

ぱこち回答回数247ベストアンサー獲得回数1132011/11/17 23:03:09ここでベストアンサー

行数と文字列の長さ分だけそれぞれ for で回していって、charAt() で一文字ずつ格納するのが正攻法かなと思いました。

var rows = value.split('\n');
var cols = [];

for (var i = 0; i < rows.length; i++) {
    cols[i] = [];
    for (var c = 0; c < rows[i].length; c++)
     cols[i][c] = rows[i].charAt(c);
}

http://jsfiddle.net/9vXVK/1/

空文字で split するとちょっと楽できそうです。

for (var i = 0; i < rows.length; i++)
 cols.push(rows[i].split(''));

http://jsfiddle.net/9vXVK/

他1件のコメントを見る
id:pacochi

(1)split("\n")で1行ごとに配列に入れられそうなのですがなぜ格納出来ないでしょうか?

行ごとに配列に入れるところでも問題があったのですね。
おそらく、質問文のコードで「¥」が制御文字の「u+005C」ではなく、単なる円記号の「u+00A5」になっているためだと思います。
「¥」を「\」にすれば、cols (私の回答では rows にあたるところ) に ['11111111'],['22222222'],['33333333'],[''] と入りました。

日本語入力ソフトによっては、キーボードで「\」を打った時点でそうなってしまうみたいです。
http://aoyagikouhei.blog8.fc2.com/blog-entry-41.html

(2)空文字で split するとなぜcolsの中身が2次元配列になるのでしょうか?

split 単体では二次元配列にはなりません。
最初に作った配列 (行ごとに区切ったもの) を、さらに文字ごとに分割して二次元配列にしています。

分割に空文字を指定すると一文字ずつ配列に入るのは、そういう仕様だからです。

例えば、 separator が空文字列ならば、文字列は不可分の文字に分割される;

15.5 String オブジェクト (String Objects)
2011/11/18 08:45:33
id:koime_ryokutya

詳しい回答ありがとうございます。理解出来ました。

2011/11/20 09:18:06
id:rsc96074 No.2

rsc回答回数4404ベストアンサー獲得回数4052011/11/17 23:59:23

 こんな感じでどうでしょうか。(^_^;

<html>
<head></head>

<body>
<textarea id="TA">
11111111
22222222
33333333
</textarea>

<script>
var objTA=document.getElementById("TA");
var strTmp = objTA.value.split('\n');
var m = strTmp.length-1;
var n = strTmp[0].length-1;
alert(m+','+n);
var cols = new Array(m);
var i,j;
for(i=0; i<m; i++){
	cols[i] = new Array(n);
	for(j=0; j<n ;j++){
		cols[i][j]=strTmp[i].charAt(j);
	}
	alert(cols[i]);
}

</script>
</body>
</html>
id:koime_ryokutya

回答ありがとうございます。こちらもいいですね。

2011/11/20 09:17:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません