回答編集履歴

3

コード修正。

2016/02/25 23:07

投稿

unau
unau

スコア2468

test CHANGED
@@ -42,13 +42,9 @@
42
42
 
43
43
  var x1 = (function(j) {
44
44
 
45
- return JSON.parse('{' + a.join(',').replace(new RegExp('((\\w+,){' + (size - \
45
+ return JSON.parse('{' + a.join(',').replace(new RegExp('((\\w+,){' + (size - 1) + '}(\\w))', 'g'), function(m) {
46
46
 
47
- 1) + '}(\\w))', 'g'), function(m) {
48
-
49
- return '"' + String.fromCharCode(65 + j++) + '":"' + m.split(',').join('') \
47
+ return '"' + String.fromCharCode(65 + j++) + '":"' + m.split(',').join('') + '"';
50
-
51
- + '"';
52
48
 
53
49
  }) + '}');
54
50
 

2

size 可変に修正

2016/02/25 23:07

投稿

unau
unau

スコア2468

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  for (i = j = 0, len = a.length; i < len; i += size, j++) {
26
26
 
27
- ret[String.fromCharCode(65 + j)] = a.splice(0, 3).join('');
27
+ ret[String.fromCharCode(65 + j)] = a.splice(0, size).join('');
28
28
 
29
29
  }
30
30
 
@@ -38,9 +38,13 @@
38
38
 
39
39
 
40
40
 
41
+
42
+
41
43
  var x1 = (function(j) {
42
44
 
43
- return JSON.parse('{' + a.join(',').replace(/((\w+,){2}(\w))/g, function(m) {
45
+ return JSON.parse('{' + a.join(',').replace(new RegExp('((\\w+,){' + (size - \
46
+
47
+ 1) + '}(\\w))', 'g'), function(m) {
44
48
 
45
49
  return '"' + String.fromCharCode(65 + j++) + '":"' + m.split(',').join('') \
46
50
 

1

サンプルコードのバグ修正、追加コード、実行結果付与

2016/02/25 08:36

投稿

unau
unau

スコア2468

test CHANGED
@@ -1,4 +1,10 @@
1
1
  私は素の javascript だとこんな感じで書いちゃいますが、きっと他の人がもっと面白い回答をしてくれるでしょう。
2
+
3
+ (最初に示したコードは `splice()` で元の配列を破壊しちゃっていたので、クローンを作る一行を追加しました。
4
+
5
+ あと、誰もやらないだろう、という `JSON.parse()` と正規表現で処理するコードも書いてみました。
6
+
7
+ 実行結果もつけました。)
2
8
 
3
9
  ```javascript
4
10
 
@@ -14,9 +20,11 @@
14
20
 
15
21
  var x0 = (function(a,ret,len,i, j){
16
22
 
23
+ a = a.concat();
24
+
17
25
  for (i = j = 0, len = a.length; i < len; i += size, j++) {
18
26
 
19
- ret[String.fromCharCode(65 + j)] =a.splice(0, 3).join('');
27
+ ret[String.fromCharCode(65 + j)] = a.splice(0, 3).join('');
20
28
 
21
29
  }
22
30
 
@@ -28,4 +36,34 @@
28
36
 
29
37
  console.log('use splice', x0);
30
38
 
39
+
40
+
41
+ var x1 = (function(j) {
42
+
43
+ return JSON.parse('{' + a.join(',').replace(/((\w+,){2}(\w))/g, function(m) {
44
+
45
+ return '"' + String.fromCharCode(65 + j++) + '":"' + m.split(',').join('') \
46
+
47
+ + '"';
48
+
49
+ }) + '}');
50
+
51
+ })(0);
52
+
53
+
54
+
55
+ console.log('use regexp', x1);
56
+
31
57
  ```
58
+
59
+ 以下、実行結果
60
+
61
+ ```
62
+
63
+ initial array [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' ]
64
+
65
+ use splice { A: 'abc', B: 'def', C: 'ghi' }
66
+
67
+ use regexp { A: 'abc', B: 'def', C: 'ghi' }
68
+
69
+ ```