回答編集履歴
22
テキスト修正
answer
CHANGED
@@ -108,7 +108,7 @@
|
|
108
108
|
```
|
109
109
|
- **上記の動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/c0u1vp87/11/](https://jsfiddle.net/jun68ykt/c0u1vp87/11/)
|
110
110
|
|
111
|
-
この回答の冒頭に、入力データの様々な
|
111
|
+
この回答の冒頭に、入力データの様々な拡張性について書きましたが、上記の関数 `makeCSVData`はそれらに対応しており、 以下のような入力でも適切に処理してCSV用のデータを生成します。
|
112
112
|
|
113
113
|
```javascript
|
114
114
|
const d1 = [
|
21
テキスト修正
answer
CHANGED
@@ -108,7 +108,7 @@
|
|
108
108
|
```
|
109
109
|
- **上記の動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/c0u1vp87/11/](https://jsfiddle.net/jun68ykt/c0u1vp87/11/)
|
110
110
|
|
111
|
-
この回答の冒頭に、入力データの様々な可能性について書きましたが、
|
111
|
+
この回答の冒頭に、入力データの様々な可能性について書きましたが、上記の関数 `makeCSVData`はそれらに対応しており、 以下のような入力でも適切に処理してCSV用のデータを生成します。
|
112
112
|
|
113
113
|
```javascript
|
114
114
|
const d1 = [
|
@@ -137,4 +137,4 @@
|
|
137
137
|
- **上記の動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/c0u1vp87/10/](https://jsfiddle.net/jun68ykt/c0u1vp87/10/)
|
138
138
|
|
139
139
|
|
140
|
-
ご質問で提示された与件の範囲をかなり超えた大袈裟なものになって
|
140
|
+
関数 `makeCSVData`は、ご質問で提示された与件の範囲をかなり超えた大袈裟なものになってしまいましたが、先の様々な入力の拡張に対応させようとすると、こういうコードになるという一例として参考にして頂ければと思います。
|
20
テキスト修正
answer
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
上記のような可能性が考えられますが、これらのうち、今後、何が変わるかもしれないのか(または、変わらないのか)がはっきりしていると、リファクタの方向性が決まります。
|
14
14
|
|
15
|
-
以下
|
15
|
+
以下は、上記の可能性のどれであっても、修正すべき箇所がなるべく分かりやすいように、という考え方で作成したコードです。このコードで作られる `data` は、ご質問にある `data` と同じ内容の配列になります。
|
16
16
|
|
17
17
|
```javascript
|
18
18
|
const data1 = [
|
19
テキスト修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
この回答では、まず、ご質問に挙げられている、オブジェクトの配列 `var data`と同じ内容の配列を作るためのコードを挙げます。その後、追記にて、より
|
3
|
+
この回答では、まず、ご質問に挙げられている、オブジェクトの配列 `var data`と同じ内容の配列を作るためのコードを挙げます。その後、追記にて、よりCSVに近い配列を作るコードを示します。
|
4
4
|
|
5
5
|
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
6
6
|
|
@@ -10,7 +10,7 @@
|
|
10
10
|
- `data1`および`data2`の要素は、どれも長さが2の配列であるが、今後、3以上になるかもしれない。(つまり、 `num`, `alpha` の次のサフィックスが追加されるかもしれない)
|
11
11
|
- `data1`および`data2`の要素である配列は、どれも長さが2で同じ長さであるが、常にすべてが同じ長さとは限らない。
|
12
12
|
|
13
|
-
上記のような可能性が考えられますが、これらのうち、今後、何が変わるかもしれないのか(または、変わらないのか)がはっきりしていると、リファクタの方向性
|
13
|
+
上記のような可能性が考えられますが、これらのうち、今後、何が変わるかもしれないのか(または、変わらないのか)がはっきりしていると、リファクタの方向性が決まります。
|
14
14
|
|
15
15
|
以下の回答は、上記のどれであっても、修正すべき箇所がなるべく分かりやすいように、という考え方で作成したコードです。
|
16
16
|
|
18
テキスト修正
answer
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
- `data1`および`data2`の要素は、どれも長さが2の配列であるが、今後、3以上になるかもしれない。(つまり、 `num`, `alpha` の次のサフィックスが追加されるかもしれない)
|
11
11
|
- `data1`および`data2`の要素である配列は、どれも長さが2で同じ長さであるが、常にすべてが同じ長さとは限らない。
|
12
12
|
|
13
|
-
上記のような可能性が考えられますが、このうち、今後、何が変わるかもしれないのか(または、変わらないのか)がはっきりしていると、リファクタの方向性も決まってきます。
|
13
|
+
上記のような可能性が考えられますが、これらのうち、今後、何が変わるかもしれないのか(または、変わらないのか)がはっきりしていると、リファクタの方向性も決まってきます。
|
14
14
|
|
15
15
|
以下の回答は、上記のどれであっても、修正すべき箇所がなるべく分かりやすいように、という考え方で作成したコードです。
|
16
16
|
|
17
テキスト修正
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
- `data1` と `data2` しかないが、`data3`, `data4` ... と増える可能性がある。
|
9
9
|
- `data1` と `data2` はともに要素の数が3で同じだが、いつも同じとは限らない。
|
10
10
|
- `data1`および`data2`の要素は、どれも長さが2の配列であるが、今後、3以上になるかもしれない。(つまり、 `num`, `alpha` の次のサフィックスが追加されるかもしれない)
|
11
|
-
- `data1`および`data2`の要素である配列は、どれも長さが2で同じ長さであるが、
|
11
|
+
- `data1`および`data2`の要素である配列は、どれも長さが2で同じ長さであるが、常にすべてが同じ長さとは限らない。
|
12
12
|
|
13
13
|
上記のような可能性が考えられますが、このうち、今後、何が変わるかもしれないのか(または、変わらないのか)がはっきりしていると、リファクタの方向性も決まってきます。
|
14
14
|
|
16
テキスト修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
この回答では、まず、ご質問に挙げられている、オブジェクトの配列 `var data`と同じ内容の配列を作る
|
3
|
+
この回答では、まず、ご質問に挙げられている、オブジェクトの配列 `var data`と同じ内容の配列を作るためのコードを挙げます。その後、追記にて、よりCSVに近い配列を作るコードを示します。
|
4
4
|
|
5
5
|
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
6
6
|
|
15
テキスト修正
answer
CHANGED
@@ -108,7 +108,7 @@
|
|
108
108
|
```
|
109
109
|
- **上記の動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/c0u1vp87/11/](https://jsfiddle.net/jun68ykt/c0u1vp87/11/)
|
110
110
|
|
111
|
-
以下のような入力にも対応します。
|
111
|
+
この回答の冒頭に、入力データの様々な可能性について書きましたが、これらに対応して、上記の関数 `makeCSVData` は以下のような入力にも対応します。
|
112
112
|
|
113
113
|
```javascript
|
114
114
|
const d1 = [
|
14
テキスト修正
answer
CHANGED
@@ -61,7 +61,7 @@
|
|
61
61
|
]
|
62
62
|
```
|
63
63
|
|
64
|
-
で
|
64
|
+
そこで、上記のような配列を得るための、以下のような関数を作成しました。
|
65
65
|
|
66
66
|
```javascript
|
67
67
|
function makeCSVData(dataObj, columns) {
|
@@ -137,4 +137,4 @@
|
|
137
137
|
- **上記の動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/c0u1vp87/10/](https://jsfiddle.net/jun68ykt/c0u1vp87/10/)
|
138
138
|
|
139
139
|
|
140
|
-
ご質問で提示された与件の範囲をかなり超え
|
140
|
+
ご質問で提示された与件の範囲をかなり超えた大袈裟なものになっているかもしれませんが、汎用化を進めると、こういうコードになるという一例として参考にして頂ければと思います。
|
13
テキスト修正
answer
CHANGED
@@ -1,14 +1,6 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
この回答では、まず、ご質問に挙げられている、オブジェクトの配列 `data`
|
4
|
-
```
|
5
|
-
var data = [
|
6
|
-
{'data1-num': data1[0][0],'data1-alpha': data1[0][1],'data2-num': data2[0][0],'data2-alpha': data2[0][1]},
|
7
|
-
{'data1-num': data1[1][0],'data1-alpha': data1[1][1],'data2-num': data2[1][0],'data2-alpha': data2[1][1]},
|
8
|
-
{'data1-num': data1[2][0],'data1-alpha': data1[2][1],'data2-num': data2[2][0],'data2-alpha': data2[2][1]},
|
9
|
-
];
|
10
|
-
```
|
11
|
-
と同じ内容の配列
|
3
|
+
この回答では、まず、ご質問に挙げられている、オブジェクトの配列 `var data`と同じ内容の配列を作ることを目的としたコードを回答します。その後、追記にて、よりCSVに近い配列を作るコードを示します。
|
12
4
|
|
13
5
|
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
14
6
|
|
12
テキスト修正
answer
CHANGED
@@ -58,7 +58,7 @@
|
|
58
58
|
|
59
59
|
### 追記
|
60
60
|
|
61
|
-
ご質問のコードにある `data` とは違う
|
61
|
+
CSV を作るためにより適した配列ということでいえば、ご質問のコードにある `data` とは違う配列になりますが、以下のような配列のほうがよりCSVに近いと思います。
|
62
62
|
|
63
63
|
```javascript
|
64
64
|
[
|
11
テキスト修正
answer
CHANGED
@@ -116,7 +116,7 @@
|
|
116
116
|
```
|
117
117
|
- **上記の動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/c0u1vp87/11/](https://jsfiddle.net/jun68ykt/c0u1vp87/11/)
|
118
118
|
|
119
|
-
|
119
|
+
以下のような入力にも対応します。
|
120
120
|
|
121
121
|
```javascript
|
122
122
|
const d1 = [
|
10
テキスト修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
この回答では、ご質問に挙げられている、オブジェクトの配列 `data`
|
3
|
+
この回答では、まず、ご質問に挙げられている、オブジェクトの配列 `data`
|
4
4
|
```
|
5
5
|
var data = [
|
6
6
|
{'data1-num': data1[0][0],'data1-alpha': data1[0][1],'data2-num': data2[0][0],'data2-alpha': data2[0][1]},
|
@@ -8,7 +8,7 @@
|
|
8
8
|
{'data1-num': data1[2][0],'data1-alpha': data1[2][1],'data2-num': data2[2][0],'data2-alpha': data2[2][1]},
|
9
9
|
];
|
10
10
|
```
|
11
|
-
と同じ内容の配列 `data` を作ることを目的としたコードを回答します。
|
11
|
+
と同じ内容の配列 `data` を作ることを目的としたコードを回答し、追記にて、よりCSVに近い配列を作るコードを示します。
|
12
12
|
|
13
13
|
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
14
14
|
|
9
テキスト修正
answer
CHANGED
@@ -54,4 +54,95 @@
|
|
54
54
|
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3w4je19o/4](https://jsfiddle.net/jun68ykt/3w4je19o/4)
|
55
55
|
|
56
56
|
|
57
|
-
以上、参考になれば幸いです。
|
57
|
+
以上、参考になれば幸いです。
|
58
|
+
|
59
|
+
### 追記
|
60
|
+
|
61
|
+
ご質問のコードにある `data` とは違う内容の配列になりますが、CSV を作るためにより適した配列ということでいえば、以下のような配列のほうが、より目的とするCSVに近いと思います。
|
62
|
+
|
63
|
+
```javascript
|
64
|
+
[
|
65
|
+
["data1-num", "data1-alpha", "data2-num" ,"data2-alpha"],
|
66
|
+
[1,"A",4,"D"],
|
67
|
+
[2,"B",5,"E"],
|
68
|
+
[3,"C",6,"F"]
|
69
|
+
]
|
70
|
+
```
|
71
|
+
|
72
|
+
ですので、上記のような配列を得るためのコードを考え、以下のような関数を作成しました。
|
73
|
+
|
74
|
+
```javascript
|
75
|
+
function makeCSVData(dataObj, columns) {
|
76
|
+
const keys = Object.keys(dataObj).sort();
|
77
|
+
|
78
|
+
const lengths = keys.reduce((m, k) => m.set(k, Math.max(...dataObj[k].map(ary => ary.length))), new Map());
|
79
|
+
|
80
|
+
const header = keys.reduce((ary, k) =>
|
81
|
+
ary.concat([...Array(lengths.get(k))].map((_, i) => `${k}-${columns[i]}`)), []);
|
82
|
+
|
83
|
+
const numRows = Math.max(...Object.values(dataObj).map(ary => ary.length));
|
84
|
+
|
85
|
+
const data = [...Array(numRows)].reduce((ary, _, i) => {
|
86
|
+
ary.push(keys.reduce((a, k) =>
|
87
|
+
a.concat(
|
88
|
+
dataObj[k][i] ?
|
89
|
+
[...dataObj[k][i], ...Array(lengths.get(k) - dataObj[k][i].length ) ] :
|
90
|
+
[...Array(lengths.get(k))]
|
91
|
+
) ,[]));
|
92
|
+
return ary;
|
93
|
+
},
|
94
|
+
[header]);
|
95
|
+
|
96
|
+
return data;
|
97
|
+
}
|
98
|
+
```
|
99
|
+
|
100
|
+
上記の関数 `makeCSVData` は以下のように使います。
|
101
|
+
|
102
|
+
```javascript
|
103
|
+
const data1 = [
|
104
|
+
[1,'A'],
|
105
|
+
[2,'B'],
|
106
|
+
[3,'C']
|
107
|
+
];
|
108
|
+
|
109
|
+
const data2 = [
|
110
|
+
[4,'D'],
|
111
|
+
[5,'E'],
|
112
|
+
[6,'F']
|
113
|
+
];
|
114
|
+
|
115
|
+
const data = makeCSVData({ data1, data2 }, ['num', 'alpha']);
|
116
|
+
```
|
117
|
+
- **上記の動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/c0u1vp87/11/](https://jsfiddle.net/jun68ykt/c0u1vp87/11/)
|
118
|
+
|
119
|
+
関数 makeCSVData は以下のような入力にも対応します。
|
120
|
+
|
121
|
+
```javascript
|
122
|
+
const d1 = [
|
123
|
+
[1,'A'],
|
124
|
+
[2,'B'],
|
125
|
+
[3,'C'],
|
126
|
+
[-1,'a']
|
127
|
+
];
|
128
|
+
|
129
|
+
const d2 = [
|
130
|
+
[4,'D', true],
|
131
|
+
[5,'E'],
|
132
|
+
[6,'F', false, 100]
|
133
|
+
];
|
134
|
+
|
135
|
+
const d3 = [
|
136
|
+
[7,'X'],
|
137
|
+
[8,'Y'],
|
138
|
+
[9,'Z'],
|
139
|
+
[-7, 'x'],
|
140
|
+
[-8, 'y']
|
141
|
+
];
|
142
|
+
|
143
|
+
const data = makeCSVData({ d1, d2, d3 }, ['num', 'alpha', 'beta', 'gamma']);
|
144
|
+
```
|
145
|
+
- **上記の動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/c0u1vp87/10/](https://jsfiddle.net/jun68ykt/c0u1vp87/10/)
|
146
|
+
|
147
|
+
|
148
|
+
ご質問で提示された与件の範囲をかなり超えてしまっているかもしれませんが、汎用化を進めると、こういうコードになるという一例として参考にして頂ければと思います。
|
8
テキスト修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
この回答では、ご質問に挙げられている
|
3
|
+
この回答では、ご質問に挙げられている、オブジェクトの配列 `data`
|
4
4
|
```
|
5
5
|
var data = [
|
6
6
|
{'data1-num': data1[0][0],'data1-alpha': data1[0][1],'data2-num': data2[0][0],'data2-alpha': data2[0][1]},
|
@@ -8,7 +8,7 @@
|
|
8
8
|
{'data1-num': data1[2][0],'data1-alpha': data1[2][1],'data2-num': data2[2][0],'data2-alpha': data2[2][1]},
|
9
9
|
];
|
10
10
|
```
|
11
|
-
と同じ内容の配列を作ることを目的としたコードを回答します。
|
11
|
+
と同じ内容の配列 `data` を作ることを目的としたコードを回答します。
|
12
12
|
|
13
13
|
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
14
14
|
|
@@ -40,17 +40,18 @@
|
|
40
40
|
[`${prefix}-alpha`]: ary[1]
|
41
41
|
});
|
42
42
|
|
43
|
-
const
|
43
|
+
const dataObj = { data1, data2 };
|
44
44
|
|
45
|
-
const tmp = Object.entries(
|
45
|
+
const tmp = Object.entries(dataObj).map(([k, ary]) => ary.map(e => toObj(e, k)));
|
46
46
|
|
47
|
-
const
|
47
|
+
const data = tmp[0].map((e,i) => ({...e, ...tmp[1][i]}));
|
48
48
|
|
49
|
-
console.log(
|
49
|
+
console.log(data);
|
50
50
|
|
51
|
+
|
51
52
|
```
|
52
53
|
|
53
|
-
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3w4je19o/
|
54
|
+
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3w4je19o/4](https://jsfiddle.net/jun68ykt/3w4je19o/4)
|
54
55
|
|
55
56
|
|
56
57
|
以上、参考になれば幸いです。
|
7
テキスト修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
この回答は、ご質問に挙げられているコードにある
|
3
|
+
この回答では、ご質問に挙げられているコードにあるオブジェクトの配列
|
4
4
|
```
|
5
5
|
var data = [
|
6
6
|
{'data1-num': data1[0][0],'data1-alpha': data1[0][1],'data2-num': data2[0][0],'data2-alpha': data2[0][1]},
|
@@ -8,7 +8,7 @@
|
|
8
8
|
{'data1-num': data1[2][0],'data1-alpha': data1[2][1],'data2-num': data2[2][0],'data2-alpha': data2[2][1]},
|
9
9
|
];
|
10
10
|
```
|
11
|
-
|
11
|
+
と同じ内容の配列を作ることを目的としたコードを回答します。
|
12
12
|
|
13
13
|
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
14
14
|
|
6
テキスト修正
answer
CHANGED
@@ -1,5 +1,15 @@
|
|
1
|
-
こんにちは
|
1
|
+
こんにちは。
|
2
2
|
|
3
|
+
この回答は、ご質問に挙げられているコードにある
|
4
|
+
```
|
5
|
+
var data = [
|
6
|
+
{'data1-num': data1[0][0],'data1-alpha': data1[0][1],'data2-num': data2[0][0],'data2-alpha': data2[0][1]},
|
7
|
+
{'data1-num': data1[1][0],'data1-alpha': data1[1][1],'data2-num': data2[1][0],'data2-alpha': data2[1][1]},
|
8
|
+
{'data1-num': data1[2][0],'data1-alpha': data1[2][1],'data2-num': data2[2][0],'data2-alpha': data2[2][1]},
|
9
|
+
];
|
10
|
+
```
|
11
|
+
によって作られる、オブジェクトの配列`data` と同じ内容の配列を作ることを目的としたコードを回答します。
|
12
|
+
|
3
13
|
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
4
14
|
|
5
15
|
ご質問に挙げられているコードでは、
|
5
テキスト修正
answer
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
|
33
33
|
const data = { data1, data2 };
|
34
34
|
|
35
|
-
const tmp = Object.
|
35
|
+
const tmp = Object.entries(data).map(([k, ary]) => ary.map(e => toObj(e, k)));
|
36
36
|
|
37
37
|
const result = tmp[0].map((e,i) => ({...e, ...tmp[1][i]}));
|
38
38
|
|
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
```
|
42
42
|
|
43
|
-
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3w4je19o/
|
43
|
+
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3w4je19o/3](https://jsfiddle.net/jun68ykt/3w4je19o/3)
|
44
44
|
|
45
45
|
|
46
46
|
以上、参考になれば幸いです。
|
4
テキスト修正
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
4
4
|
|
5
|
-
ご質問に挙げられてるコードでは、
|
5
|
+
ご質問に挙げられているコードでは、
|
6
6
|
- `data1` と `data2` しかないが、`data3`, `data4` ... と増える可能性がある。
|
7
7
|
- `data1` と `data2` はともに要素の数が3で同じだが、いつも同じとは限らない。
|
8
8
|
- `data1`および`data2`の要素は、どれも長さが2の配列であるが、今後、3以上になるかもしれない。(つまり、 `num`, `alpha` の次のサフィックスが追加されるかもしれない)
|
3
テキスト修正
answer
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
こんにちは
|
2
2
|
|
3
|
-
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、
|
3
|
+
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、以下が思いつきます。
|
4
4
|
|
5
|
+
ご質問に挙げられてるコードでは、
|
5
|
-
-
|
6
|
+
- `data1` と `data2` しかないが、`data3`, `data4` ... と増える可能性がある。
|
6
|
-
-
|
7
|
+
- `data1` と `data2` はともに要素の数が3で同じだが、いつも同じとは限らない。
|
7
|
-
-
|
8
|
+
- `data1`および`data2`の要素は、どれも長さが2の配列であるが、今後、3以上になるかもしれない。(つまり、 `num`, `alpha` の次のサフィックスが追加されるかもしれない)
|
8
|
-
-
|
9
|
+
- `data1`および`data2`の要素である配列は、どれも長さが2で同じ長さであるが、今後、そうでない場合があるかもしれない。
|
9
10
|
|
10
|
-
|
11
|
+
上記のような可能性が考えられますが、このうち、今後、何が変わるかもしれないのか(または、変わらないのか)がはっきりしていると、リファクタの方向性も決まってきます。
|
11
12
|
|
12
13
|
以下の回答は、上記のどれであっても、修正すべき箇所がなるべく分かりやすいように、という考え方で作成したコードです。
|
13
14
|
|
2
テキスト修正
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
- 質問には、`data1` と `data2` しかないが、`data3`, `data4` ... と増える可能性がある。
|
6
6
|
- 質問では、`data1` と `data2` はともに要素の数が3で同じだが、いつも同じとは限らない。
|
7
7
|
- 質問では、`data1`および`data2`の要素は、どれも長さが2の配列であるが、今後、3以上になるかもしれない。(つまり、 `num`, `alpha` の次のサフィックスが追加されるかもしれない)
|
8
|
-
- 質問では、`data1`および`data2`の要素は、どれも長さが2で同じ長さであるが、今後、そうでない場合があるかもしれない。
|
8
|
+
- 質問では、`data1`および`data2`の要素である配列は、どれも長さが2で同じ長さであるが、今後、そうでない場合があるかもしれない。
|
9
9
|
|
10
10
|
といったことが考えられますが、このうち、今後、何が変わるかもしれないのか(または、変わらないのか)がはっきりしていると、リファクタの方向性も決まってきます。
|
11
11
|
|
1
テキスト修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
こんにちは
|
2
2
|
|
3
|
-
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのか
|
3
|
+
ご質問の要件のうち、今後、何が変わる可能性があるのか?によって、書くコードが変わってくると思います。ご質問に挙げられている与件から、今後どうなる可能性があるのかを思いつくままに挙げてみると、
|
4
4
|
|
5
5
|
- 質問には、`data1` と `data2` しかないが、`data3`, `data4` ... と増える可能性がある。
|
6
6
|
- 質問では、`data1` と `data2` はともに要素の数が3で同じだが、いつも同じとは限らない。
|
@@ -33,13 +33,13 @@
|
|
33
33
|
|
34
34
|
const tmp = Object.keys(data).map(k => data[k].map(e => toObj(e, k)));
|
35
35
|
|
36
|
-
|
36
|
+
const result = tmp[0].map((e,i) => ({...e, ...tmp[1][i]}));
|
37
37
|
|
38
38
|
console.log(result);
|
39
39
|
|
40
40
|
```
|
41
41
|
|
42
|
-
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3w4je19o/
|
42
|
+
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3w4je19o/2](https://jsfiddle.net/jun68ykt/3w4je19o/2)
|
43
43
|
|
44
44
|
|
45
45
|
以上、参考になれば幸いです。
|