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>
行数と文字列の長さ分だけそれぞれ 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(''));
行数と文字列の長さ分だけそれぞれ 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(''));
(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)
詳しい回答ありがとうございます。理解出来ました。
こんな感じでどうでしょうか。(^_^;
<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>
回答ありがとうございます。こちらもいいですね。
行ごとに配列に入れるところでも問題があったのですね。
おそらく、質問文のコードで「¥」が制御文字の「u+005C」ではなく、単なる円記号の「u+00A5」になっているためだと思います。
「¥」を「\」にすれば、cols (私の回答では rows にあたるところ) に ['11111111'],['22222222'],['33333333'],[''] と入りました。
日本語入力ソフトによっては、キーボードで「\」を打った時点でそうなってしまうみたいです。
http://aoyagikouhei.blog8.fc2.com/blog-entry-41.html
split 単体では二次元配列にはなりません。
2011/11/18 08:45:33最初に作った配列 (行ごとに区切ったもの) を、さらに文字ごとに分割して二次元配列にしています。
分割に空文字を指定すると一文字ずつ配列に入るのは、そういう仕様だからです。
詳しい回答ありがとうございます。理解出来ました。
2011/11/20 09:18:06