配列の中にある文字を一定の範囲ずつで、1つの文字列として作成したいです。
イメージとしては、
配列a[0~8]=("a","b","c","d","e","f","g","h","i")を
A="abc"
B="def"
C="ghi"
のようにしたいのですが、アルゴリズムが思い浮かばなくて困っています。
誰かご教授ください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
A,B,Cが配列でいいなら
javascript
1var a = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]; 2var result = []; 3 4for(int i = 0; i < a.length(); i++) 5{ 6 result[i / 3] = i % 3 == 0 ? a[i] : result[i / 3] + a[i]; 7} 8
投稿2016/02/25 08:32
総合スコア985
0
私は素の javascript だとこんな感じで書いちゃいますが、きっと他の人がもっと面白い回答をしてくれるでしょう。
(最初に示したコードは splice()
で元の配列を破壊しちゃっていたので、クローンを作る一行を追加しました。
あと、誰もやらないだろう、という JSON.parse()
と正規表現で処理するコードも書いてみました。
実行結果もつけました。)
javascript
1var a = 'abcdefghi'.split(''); 2var size = 3; 3 4console.log('initial array', a); 5 6var x0 = (function(a,ret,len,i, j){ 7 a = a.concat(); 8 for (i = j = 0, len = a.length; i < len; i += size, j++) { 9 ret[String.fromCharCode(65 + j)] = a.splice(0, size).join(''); 10 } 11 return ret; 12})(a, {}); 13 14console.log('use splice', x0); 15 16 17var x1 = (function(j) { 18 return JSON.parse('{' + a.join(',').replace(new RegExp('((\\w+,){' + (size - 1) + '}(\\w))', 'g'), function(m) { 19 return '"' + String.fromCharCode(65 + j++) + '":"' + m.split(',').join('') + '"'; 20 }) + '}'); 21})(0); 22 23console.log('use regexp', x1);
以下、実行結果
initial array [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' ] use splice { A: 'abc', B: 'def', C: 'ghi' } use regexp { A: 'abc', B: 'def', C: 'ghi' }
投稿2016/02/25 08:09
編集2016/02/25 23:07総合スコア2468
0
var a = ["a","b","c","d","e","f","g","h","i"]; _.fromPairs(_.chunk(a, 3).map(function(it, index){ return [String.fromCharCode(65+index), it.join("")]; })); // Object {A: "abc", B: "def", C: "ghi"}
ライブラリのlodashやそれの元ネタのUnderscoreは配列操作の宝庫なので、
関数の扱いに慣れれば自由自在に値を変更出来るようになります。
上記はちょっと黒魔術過ぎたのでこんな感じでどうでしょう?
var a = ["a","b","c","d","e","f","g","h","i"]; var words = _.chunk(a, 3).map(function(it){return it.join("")}) // ["abc", "def", "ghi"] var A = words[0]; var B = words[1]; var C = words[2];
投稿2016/02/25 08:07
総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。