人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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>

●質問者: koime_ryokutya
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ぱこち
ベストアンサー

行数と文字列の長さ分だけそれぞれ 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/


koime_ryokutyaさんのコメント
回答ありがとうございます。 下部の方のやり方がすっきりしていていいですね。 ただ、 (1)split("?n")で1行ごとに配列に入れられそうなのですがなぜ格納出来ないでしょうか? (2)空文字で split するとなぜcolsの中身が2次元配列になるのでしょうか?

ぱこちさんのコメント
>> (1)split("\n")で1行ごとに配列に入れられそうなのですがなぜ格納出来ないでしょうか? << 行ごとに配列に入れるところでも問題があったのですね。 おそらく、質問文のコードで「&yen;」が制御文字の「u+005C」ではなく、単なる円記号の「u+00A5」になっているためだと思います。 「&yen;」を「\」にすれば、cols (私の回答では rows にあたるところ) に <samp>['11111111'],['22222222'],['33333333'],['']</samp> と入りました。 日本語入力ソフトによっては、キーボードで「\」を打った時点でそうなってしまうみたいです。 http://aoyagikouhei.blog8.fc2.com/blog-entry-41.html >> (2)空文字で split するとなぜcolsの中身が2次元配列になるのでしょうか? << split 単体では二次元配列にはなりません。 最初に作った配列 (行ごとに区切ったもの) を、さらに文字ごとに分割して二次元配列にしています。 分割に空文字を指定すると一文字ずつ配列に入るのは、そういう仕様だからです。 >http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/15-5_String_Objects.html#section-15.5.4.14:title> 例えば、 separator が空文字列ならば、文字列は不可分の文字に分割される; <<

koime_ryokutyaさんのコメント
詳しい回答ありがとうございます。理解出来ました。

2 ● rsc

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

<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>

koime_ryokutyaさんのコメント
回答ありがとうございます。こちらもいいですね。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ