回答編集履歴

41

テキスト修正

2018/08/26 22:55

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -110,13 +110,13 @@
110
110
 
111
111
     
112
112
 
113
- ※以下の追記1, 2 で上記コードの修正案を書いてます。
113
+ ※以下の追記1, 2 で上記の2つの関数の修正案を書いてます。
114
114
 
115
115
 
116
116
 
117
117
  ---
118
118
 
119
- **追記1**
119
+ **追記1**:sortedEventsOfBothTeams の別案
120
120
 
121
121
 
122
122
 
@@ -166,7 +166,7 @@
166
166
 
167
167
  ---
168
168
 
169
- **追記2**
169
+ **追記2**: timeValueの別案
170
170
 
171
171
 
172
172
 

40

テキスト修正

2018/08/26 22:55

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -120,7 +120,7 @@
120
120
 
121
121
 
122
122
 
123
- 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくいですかね
123
+ 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと、ぱっと見たとき分かりにくい気がしました
124
124
 
125
125
  [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。ソートと出し分け用のプロパティ追加を結合の後で行うことにして、以下のようになりました。
126
126
 

39

テキスト修正

2018/08/26 22:51

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
 
76
76
 
77
- - 上記コードを使って、`<table>` を作るサンプルを
77
+ 上記コードを使って、`<table>` を作るサンプルを
78
78
 
79
79
    
80
80
 
@@ -88,11 +88,7 @@
88
88
 
89
89
    
90
90
 
91
-    
92
-
93
-
94
-
95
- - コードについて補足しますと、
91
+ 上記で作成した2点の関数について、以下、補足説明します
96
92
 
97
93
 
98
94
 

38

テキスト修正

2018/08/26 22:49

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -74,7 +74,29 @@
74
74
 
75
75
 
76
76
 
77
+ - 上記コードを使って、`<table>` を作るサンプルを
78
+
79
+   
80
+
81
+ [https://jsfiddle.net/jun68ykt/bw6o1ajx/67/](https://jsfiddle.net/jun68ykt/bw6o1ajx/67/)
82
+
83
+   
84
+
85
+ に試作してみました。これは前回のご質問の回答で作成した [https://jsfiddle.net/jun68ykt/bw6o1ajx/7/](https://jsfiddle.net/jun68ykt/bw6o1ajx/7/) を、今回の回答に合わせて修正したものです。
86
+
87
+
88
+
89
+   
90
+
91
+    
92
+
93
+
94
+
95
+ - コードについて補足しますと、
96
+
97
+
98
+
77
- - 上記の `sortedEventsOfBothTeams(item)` が結合された配列を返す関数で、結合した配列を作るときに、以下の2つのプロパティを追加しています。
99
+ (1) `sortedEventsOfBothTeams(item)` が結合された配列を返す関数で、結合した配列を作るときに、以下の2つのプロパティを追加しています。
78
100
 
79
101
 
80
102
 
@@ -84,108 +106,96 @@
84
106
 
85
107
 
86
108
 
87
- - また、補助的な関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
109
+ (2) 補助的な関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
88
110
 
89
111
     
90
112
 
91
- - 実装例として、上記の関数を使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下
92
-
93
-   
94
-
95
- [https://jsfiddle.net/jun68ykt/bw6o1ajx/67/](https://jsfiddle.net/jun68ykt/bw6o1ajx/67/)
96
-
97
-   
98
-
99
- に試作してみました。これは前回のご質問の回答で作成した [https://jsfiddle.net/jun68ykt/bw6o1ajx/7/](https://jsfiddle.net/jun68ykt/bw6o1ajx/7/) を、今回の回答に合わせて修正したものです。
113
+  
114
+
115
+    
116
+
117
+ ※以下の追記1, 2 で上記コードの修正案を書いてます。
118
+
119
+
120
+
121
+ ---
122
+
123
+ **追記1**
124
+
125
+
126
+
127
+ 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくいですかね。
128
+
129
+ [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。ソートと出し分け用のプロパティ追加を結合の後で行うことにして、以下のようになりました。
130
+
131
+
132
+
133
+ ```javascript
134
+
135
+ const sortedEventsOfBothTeams = (item) => {
136
+
137
+
138
+
139
+ const allEvents = item.home_team_events.concat(item.away_team_events);
100
140
 
101
141
 
102
142
 
103
-  
143
+ const homeTeamEventIds = item.home_team_events.map(event => event.id);
144
+
145
+
146
+
104
-
147
+ return allEvents
148
+
105
-    
149
+ .map(event => ({
150
+
106
-
151
+ ...event,
152
+
153
+ team: homeTeamEventIds.includes(event.id) ? 'home_team' : 'away_team',
154
+
107
- ※以下の追記1, 2 で上記コードの修正案を書いてます。
155
+ timeValue: timeValue(event.time),
156
+
157
+ }))
158
+
159
+ .sort((e1,e2) => e1.timeValue - e2.timeValue);
160
+
161
+ };
162
+
163
+ ```
164
+
165
+
166
+
167
+ サンプル: [https://jsfiddle.net/jun68ykt/bw6o1ajx/79/](https://jsfiddle.net/jun68ykt/bw6o1ajx/79/)
108
168
 
109
169
 
110
170
 
111
171
  ---
112
172
 
113
- **追記1**
114
-
115
-
116
-
117
- 上記のコードでは、 `reduce` 中に `forEach`がって、ちょっと読みくいでかね
118
-
119
- [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。ソートと出し分け用のプロパティ追加を結合の後で行うことにして、以下のようになりました。
173
+ **追記2**
174
+
175
+
176
+
177
+ はじめ回答のほうのコードで使った [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) はいろいろと便利です。たとえば、回答中にある `timeValue(timeStr)` という関数です、reduce() を使ってみると以下のようも書けます。
120
178
 
121
179
 
122
180
 
123
181
  ```javascript
124
182
 
125
- const sortedEventsOfBothTeams = (item) => {
183
+ const timeValue = timeStr =>
184
+
126
-
185
+ timeStr.split("'").reduce((total, min) => total + Number(min), 0);
186
+
187
+
188
+
127
-
189
+ // 以下のように ' で区切られた数値を合計します。
128
-
190
+
129
- const allEvents = item.home_team_events.concat(item.away_team_events);
191
+ console.log(timeValue("5'")); // => 5
130
-
131
-
132
-
133
- const homeTeamEventIds = item.home_team_events.map(event => event.id);
192
+
134
-
135
-
136
-
137
- return allEvents
138
-
139
- .map(event => ({
140
-
141
- ...event,
142
-
143
- team: homeTeamEventIds.includes(event.id) ? 'home_team' : 'away_team',
193
+ console.log(timeValue("77'")); // => 77
144
-
145
- timeValue: timeValue(event.time),
194
+
146
-
147
- }))
148
-
149
- .sort((e1,e2) => e1.timeValue - e2.timeValue);
195
+ console.log(timeValue("90'+11")); // => 101
150
-
196
+
197
+
198
+
151
- };
199
+ console.log(timeValue("10'+11'-5'20'4.5'+0.01")); // => 40.51
152
200
 
153
201
  ```
154
-
155
-
156
-
157
- サンプル: [https://jsfiddle.net/jun68ykt/bw6o1ajx/79/](https://jsfiddle.net/jun68ykt/bw6o1ajx/79/)
158
-
159
-
160
-
161
- ---
162
-
163
- **追記2**
164
-
165
-
166
-
167
- はじめの回答のほうのコードで使った [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) はいろいろと便利です。たとえば、回答中にある `timeValue(timeStr)` という関数ですが、reduce() を使ってみると、以下のようにも書けます。
168
-
169
-
170
-
171
- ```javascript
172
-
173
- const timeValue = timeStr =>
174
-
175
- timeStr.split("'").reduce((total, min) => total + Number(min), 0);
176
-
177
-
178
-
179
- // 以下のように ' で区切られた数値を合計します。
180
-
181
- console.log(timeValue("5'")); // => 5
182
-
183
- console.log(timeValue("77'")); // => 77
184
-
185
- console.log(timeValue("90'+11")); // => 101
186
-
187
-
188
-
189
- console.log(timeValue("10'+11'-5'20'4.5'+0.01")); // => 40.51
190
-
191
- ```

37

テキスト修正

2018/08/26 22:47

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  www-wwwさんがやりたい3つのことを踏まえて、解法の一例を以下に示します。
16
16
 
17
- (※追記1, 2 に下記コードの修正案を書きました。)
17
+ (※**追記1, 2 に下記コードの修正案を書きました。**
18
18
 
19
19
 
20
20
 

36

テキスト修正

2018/08/26 22:44

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- とありましたが、以下の回答には、やりたいこと2と3も含んでいます。その点、ややお節介の過ぎる回答になってしまっていたらすみません。
11
+ とありましたが、以下の回答には、やりたいこと2と3も含んでいます。その点、ややお節介の過ぎる回答になってしまっていたらすみません。
12
12
 
13
13
 
14
14
 

35

テキスト修正

2018/08/26 16:42

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -1,4 +1,14 @@
1
1
  こんにちは。
2
+
3
+ ご質問に
4
+
5
+
6
+
7
+ > まずはやりたいこと1を実現したく、よろしくお願いします。
8
+
9
+
10
+
11
+ とありましたが、以下の回答には、やりたいこと2と3も含んでいます。その点は、ややお節介の過ぎる回答になってしまっていたらすみません。
2
12
 
3
13
 
4
14
 

34

テキスト修正

2018/08/26 16:41

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -106,7 +106,7 @@
106
106
 
107
107
  上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくいですかね。
108
108
 
109
- [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。ソートと出し分け用のプロパティ追加を後で行て以下のようになりました。
109
+ [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。ソートと出し分け用のプロパティ追加を結合の後で行うことにし以下のようになりました。
110
110
 
111
111
 
112
112
 

33

テキスト修正

2018/08/26 16:23

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -162,9 +162,7 @@
162
162
 
163
163
  const timeValue = timeStr =>
164
164
 
165
- timeStr.split("'")
166
-
167
- .reduce((total, min) => total + Number(min), 0);
165
+ timeStr.split("'").reduce((total, min) => total + Number(min), 0);
168
166
 
169
167
 
170
168
 

32

テキスト修正

2018/08/26 16:16

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -164,7 +164,7 @@
164
164
 
165
165
  timeStr.split("'")
166
166
 
167
- .reduce((total, min) => (total += Number(min)), 0);
167
+ .reduce((total, min) => total + Number(min), 0);
168
168
 
169
169
 
170
170
 

31

テキスト修正

2018/08/26 16:14

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,17 +2,9 @@
2
2
 
3
3
 
4
4
 
5
- www-wwwさんがやりたいこととし
5
+ www-wwwさんがやりたい3つのことを踏まえて、解法の一例を以下に示します。
6
6
 
7
-
8
-
9
- **2つのteam_events配列を結合した後に** `2. timeを基準にソート` **でき、かつホームチームかアウェイチームかによって** `3. タグの出し分け` ** (表の中でどの列に表示すべきかの判断)が出来るように結合するには、どうしたらいいか?**
10
-
11
-
12
-
13
- ということと把握しました。
14
-
15
- 記をえて、解法の一例を以下に示ます
7
+ (※追1, 2 に下記コードの修正案書きまし
16
8
 
17
9
 
18
10
 
@@ -72,7 +64,7 @@
72
64
 
73
65
 
74
66
 
75
- 上記の `sortedEventsOfBothTeams(item)` が結合された配列を返す関数で、結合した配列を作るときに、以下の2つのプロパティを追加しています。
67
+ - 上記の `sortedEventsOfBothTeams(item)` が結合された配列を返す関数で、結合した配列を作るときに、以下の2つのプロパティを追加しています。
76
68
 
77
69
 
78
70
 
@@ -82,27 +74,27 @@
82
74
 
83
75
 
84
76
 
85
- また、補助的な関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
77
+ - また、補助的な関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
86
78
 
87
79
     
88
80
 
89
- 実装例として、上記の関数を使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下に試作してみました。
81
+ - 実装例として、上記の関数を使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下
90
82
 
91
-
83
+   
92
84
 
93
85
  [https://jsfiddle.net/jun68ykt/bw6o1ajx/67/](https://jsfiddle.net/jun68ykt/bw6o1ajx/67/)
94
86
 
87
+   
95
88
 
89
+ に試作してみました。これは前回のご質問の回答で作成した [https://jsfiddle.net/jun68ykt/bw6o1ajx/7/](https://jsfiddle.net/jun68ykt/bw6o1ajx/7/) を、今回の回答に合わせて修正したものです。
96
90
 
97
- これは、前回のご質問の回答で作成した [https://jsfiddle.net/jun68ykt/bw6o1ajx/7/](https://jsfiddle.net/jun68ykt/bw6o1ajx/7/) に、今回の回答に合わせて適宜コードを追加、修正したものです。
91
+
98
92
 
93
+  
99
94
 
95
+    
100
96
 
101
-
102
-
103
- 以上、参考になりしたら幸いです。
97
+ 下の追記1, 2 で記コードの修正案を書いてます。
104
-
105
-
106
98
 
107
99
 
108
100
 
@@ -112,9 +104,9 @@
112
104
 
113
105
 
114
106
 
115
- 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくかったですね。
107
+ 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくですね。
116
108
 
117
- [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでょう
109
+ [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。ソートと出し分け用のプロパティ追加を後で行って以下のようになりま
118
110
 
119
111
 
120
112
 
@@ -156,30 +148,6 @@
156
148
 
157
149
 
158
150
 
159
- www-wwwさんのご質問の中に、
160
-
161
-
162
-
163
- > まずはやりたいこと1を実現したく、
164
-
165
-
166
-
167
- とありますが、上記のコードにおいては **やりたいこと1** は、 kakajikaさんのご回答と重複しますが、
168
-
169
-
170
-
171
- ```javascript
172
-
173
- const allEvents = item.home_team_events.concat(item.away_team_events);
174
-
175
- ```
176
-
177
-
178
-
179
- としている部分です。
180
-
181
-
182
-
183
151
  ---
184
152
 
185
153
  **追記2**

30

テキスト修正

2018/08/26 16:05

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -164,15 +164,7 @@
164
164
 
165
165
 
166
166
 
167
- とありまして、上記のコードにおいては **やりたいこと1** の
167
+ とありますが、上記のコードにおいては **やりたいこと1** は、 kakajikaさんご回答と重複しますが、
168
-
169
-
170
-
171
- > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
172
-
173
-
174
-
175
- ことは kakajikaさんのご回答どおり、
176
168
 
177
169
 
178
170
 
@@ -184,27 +176,7 @@
184
176
 
185
177
 
186
178
 
187
- とする時点で完了していることになります。
188
-
189
- この追記では、
190
-
191
-
192
-
193
- `item.home_team_events.concat(item.away_team_events);` **から始めても意図した動作や表示を実現するコードにたどり着ける。**
194
-
195
-
196
-
197
- を示たかった次第です。
179
+ としている部分です。
198
-
199
-
200
-
201
- (なので kakajikaさんのご回答が、www-wwwさんのご要望である、
202
-
203
- > まずはやりたいこと1を実現したく、
204
-
205
-
206
-
207
- に対して、最も過不足なく、必要十分な回答となり得るという意味において、 +1)
208
180
 
209
181
 
210
182
 
@@ -214,9 +186,7 @@
214
186
 
215
187
 
216
188
 
217
- はじめの回答のほうのコードで使った [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) はいろいろ便利です。たとえば、回答中にある `timeValue(timeStr)` という関数ですが、reduce() を使と以下のようにも書けます。
218
-
219
-
189
+ はじめの回答のほうのコードで使った [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) はいろいろ便利です。たとえば、回答中にある `timeValue(timeStr)` という関数ですが、reduce() を使ってみる以下のようにも書けます。
220
190
 
221
191
 
222
192
 
@@ -230,10 +200,16 @@
230
200
 
231
201
 
232
202
 
203
+ // 以下のように ' で区切られた数値を合計します。
204
+
233
205
  console.log(timeValue("5'")); // => 5
234
206
 
235
207
  console.log(timeValue("77'")); // => 77
236
208
 
237
209
  console.log(timeValue("90'+11")); // => 101
238
210
 
211
+
212
+
213
+ console.log(timeValue("10'+11'-5'20'4.5'+0.01")); // => 40.51
214
+
239
- ```
215
+ ```

29

テキスト修正

2018/08/26 05:58

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -108,7 +108,7 @@
108
108
 
109
109
  ---
110
110
 
111
- **追記**
111
+ **追記1**
112
112
 
113
113
 
114
114
 
@@ -205,3 +205,35 @@
205
205
 
206
206
 
207
207
  に対して、最も過不足なく、必要十分な回答となり得るという意味において、 +1)
208
+
209
+
210
+
211
+ ---
212
+
213
+ **追記2**
214
+
215
+
216
+
217
+ はじめの回答のほうのコードで使った [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) はいろいろ便利です。たとえば、回答中にある `timeValue(timeStr)` という関数ですが、reduce() を使うと以下のようにも書けます。
218
+
219
+
220
+
221
+
222
+
223
+ ```javascript
224
+
225
+ const timeValue = timeStr =>
226
+
227
+ timeStr.split("'")
228
+
229
+ .reduce((total, min) => (total += Number(min)), 0);
230
+
231
+
232
+
233
+ console.log(timeValue("5'")); // => 5
234
+
235
+ console.log(timeValue("77'")); // => 77
236
+
237
+ console.log(timeValue("90'+11")); // => 101
238
+
239
+ ```

28

テキスト修正

2018/08/26 01:43

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -204,4 +204,4 @@
204
204
 
205
205
 
206
206
 
207
- に対して、最も必要十分な回答となり得るという意味において、 +1)
207
+ に対して、最も過不足なく、必要十分な回答となり得るという意味において、 +1)

27

テキスト修正

2018/08/26 00:47

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -184,9 +184,7 @@
184
184
 
185
185
 
186
186
 
187
- とする時点で完了していることになります。(なので kakajikaさんのご回答に +1)
187
+ とする時点で完了していることになります。
188
-
189
-
190
188
 
191
189
  この追記では、
192
190
 
@@ -197,3 +195,13 @@
197
195
 
198
196
 
199
197
  ことを示したかった次第です。
198
+
199
+
200
+
201
+ (なので kakajikaさんのご回答が、www-wwwさんのご要望である、
202
+
203
+ > まずはやりたいこと1を実現したく、
204
+
205
+
206
+
207
+ に対して、最も必要十分な回答となり得るという意味において、 +1)

26

テキスト修正

2018/08/25 22:47

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -72,19 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- 上記の `sortedEventsOfBothTeams(item)` が結合された配列を返す関数になります。これは
76
-
77
-
78
-
79
- - [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) と [forEach()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)を使って (**やりたいこと2** と **3** を可能にするように、) **やりたいこと1** を行い、
80
-
81
-    
82
-
83
- - さらに、[sort()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)によって **やりたいこと2** までを完了させる
84
-
85
-
86
-
87
- というもので、結合した配列を作るときに、以下の2つのプロパティを追加しています。
75
+ 上記の `sortedEventsOfBothTeams(item)` が結合された配列を返す関数で、結合した配列を作るとき、以下の2つのプロパティを追加しています。
88
76
 
89
77
 
90
78
 

25

テキスト修正

2018/08/25 13:56

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -124,7 +124,7 @@
124
124
 
125
125
 
126
126
 
127
- 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくですね。
127
+ 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくかったですね。
128
128
 
129
129
  [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
130
130
 

24

テキスト修正

2018/08/25 13:32

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -6,208 +6,196 @@
6
6
 
7
7
 
8
8
 
9
+ **2つのteam_events配列を結合した後に** `2. timeを基準にソート` **でき、かつホームチームかアウェイチームかによって** `3. タグの出し分け` ** (表の中でどの列に表示すべきかの判断)が出来るように結合するには、どうしたらいいか?**
10
+
11
+
12
+
13
+ ということと把握しました。
14
+
15
+ 上記を踏まえて、解法の一例を以下に示します。
16
+
17
+
18
+
19
+ ```javascript
20
+
21
+ const timeValue = (timeStr) => {
22
+
23
+ const minutes = timeStr.split("'");
24
+
25
+ const value =
26
+
27
+ parseInt(minutes[0], 10) +
28
+
29
+ (minutes[1].length > 0 ? parseInt(minutes[1], 10) : 0);
30
+
31
+
32
+
33
+ return value;
34
+
35
+ };
36
+
37
+
38
+
39
+
40
+
41
+ const sortedEventsOfBothTeams = (item) => (
42
+
43
+ ['home_team', 'away_team']
44
+
45
+   .reduce((ary, team) => {
46
+
47
+   item[`${team}_events`].forEach((event) => {
48
+
49
+    ary.push({
50
+
51
+ ...event,
52
+
53
+ team,
54
+
55
+ timeValue: timeValue(event.time),
56
+
57
+ });
58
+
59
+ });
60
+
61
+ return ary;
62
+
63
+ }, [])
64
+
65
+ .sort((e1, e2) => e1.timeValue - e2.timeValue)
66
+
67
+ );
68
+
69
+
70
+
71
+ ```
72
+
73
+
74
+
75
+ 上記の `sortedEventsOfBothTeams(item)` が結合された配列を返す関数になります。これは
76
+
77
+
78
+
79
+ - [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) と [forEach()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)を使って (**やりたいこと2** と **3** を可能にするように、) **やりたいこと1** を行い、
80
+
81
+    
82
+
83
+ - さらに、[sort()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)によって **やりたいこと2** までを完了させる
84
+
85
+
86
+
87
+ というもので、結合した配列を作るときに、以下の2つのプロパティを追加しています。
88
+
89
+
90
+
91
+ 1. team --- 文字列`"home_team"` または `"away_team"` (後で `タグの出し分け` のために使う)
92
+
93
+ 2. timeValue --- `time`の文字列を `timeValue()`で数値に変換した値 (この値の昇順でソートする)
94
+
95
+
96
+
97
+ また、補助的な関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
98
+
99
+    
100
+
101
+ 実装例として、上記の関数を使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下に試作してみました。
102
+
103
+
104
+
105
+ [https://jsfiddle.net/jun68ykt/bw6o1ajx/67/](https://jsfiddle.net/jun68ykt/bw6o1ajx/67/)
106
+
107
+
108
+
109
+ これは、前回のご質問の回答で作成した [https://jsfiddle.net/jun68ykt/bw6o1ajx/7/](https://jsfiddle.net/jun68ykt/bw6o1ajx/7/) に、今回の回答に合わせて適宜コードを追加、修正したものです。
110
+
111
+
112
+
113
+
114
+
115
+ 以上、参考になりましたら幸いです。
116
+
117
+
118
+
119
+
120
+
121
+ ---
122
+
123
+ **追記**
124
+
125
+
126
+
127
+ 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくいですね。
128
+
129
+ [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
130
+
131
+
132
+
133
+ ```javascript
134
+
135
+ const sortedEventsOfBothTeams = (item) => {
136
+
137
+
138
+
139
+ const allEvents = item.home_team_events.concat(item.away_team_events);
140
+
141
+
142
+
143
+ const homeTeamEventIds = item.home_team_events.map(event => event.id);
144
+
145
+
146
+
147
+ return allEvents
148
+
149
+ .map(event => ({
150
+
151
+ ...event,
152
+
153
+ team: homeTeamEventIds.includes(event.id) ? 'home_team' : 'away_team',
154
+
155
+ timeValue: timeValue(event.time),
156
+
157
+ }))
158
+
159
+ .sort((e1,e2) => e1.timeValue - e2.timeValue);
160
+
161
+ };
162
+
163
+ ```
164
+
165
+
166
+
167
+ サンプル: [https://jsfiddle.net/jun68ykt/bw6o1ajx/79/](https://jsfiddle.net/jun68ykt/bw6o1ajx/79/)
168
+
169
+
170
+
171
+ www-wwwさんのご質問の中に、
172
+
173
+
174
+
175
+ > まずはやりたいこと1を実現したく、
176
+
177
+
178
+
179
+ とありまして、上記のコードにおいては、 **やりたいこと1** の
180
+
181
+
182
+
9
183
  > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
10
184
 
11
- > 2. timeを基準にソートし、各チームeventをオブジェクト?に入れる
185
+
12
-
13
- > 3. 連結したオブジェクトを見てタグの出し分けをしたい
186
+
14
-
15
-
16
-
17
- とのことですで、質問の主旨としては
187
+ ことは kakajikaさんのご回答どおり
18
-
19
-
20
-
21
- **2つのteam_events配列を結合した後に** `2. timeを基準にソート` **でき、かつホームチームかアウェイチームかによって** `3. タグの出し分け` ** (表の中でどの列に表示すべきかの判断)が出来るように結合するには、どうしたらいいか?**
22
-
23
-
24
-
25
- ということと把握しました。
26
-
27
- 上記を踏まえて、解法の一例を以下に示します。
28
188
 
29
189
 
30
190
 
31
191
  ```javascript
32
192
 
33
- const timeValue = (timeStr) => {
34
-
35
- const minutes = timeStr.split("'");
193
+ const allEvents = item.home_team_events.concat(item.away_team_events);
36
-
37
- const value =
38
-
39
- parseInt(minutes[0], 10) +
40
-
41
- (minutes[1].length > 0 ? parseInt(minutes[1], 10) : 0);
42
-
43
-
44
-
45
- return value;
46
-
47
- };
48
-
49
-
50
-
51
-
52
-
53
- const sortedEventsOfBothTeams = (item) => (
54
-
55
- ['home_team', 'away_team']
56
-
57
-   .reduce((ary, team) => {
58
-
59
-   item[`${team}_events`].forEach((event) => {
60
-
61
-    ary.push({
62
-
63
- ...event,
64
-
65
- team,
66
-
67
- timeValue: timeValue(event.time),
68
-
69
- });
70
-
71
- });
72
-
73
- return ary;
74
-
75
- }, [])
76
-
77
- .sort((e1, e2) => e1.timeValue - e2.timeValue)
78
-
79
- );
80
-
81
-
82
194
 
83
195
  ```
84
196
 
85
197
 
86
198
 
87
- 上記の `sortedEventsOfBothTeams(item)` が結合された配列を返す関数になります。これは
88
-
89
-
90
-
91
- - [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) と [forEach()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)を使って (**やりたいこと2** と **3** を可能にするように、) **やりたいこと1** を行い、
92
-
93
-    
94
-
95
- - さらに、[sort()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)によって **やりたいこと2** までを完了させる
96
-
97
-
98
-
99
- というもので、結合した配列を作るときに、以下の2つのプロパティを追加しています。
100
-
101
-
102
-
103
- 1. team --- 文字列`"home_team"` または `"away_team"` (後で `タグの出し分け` のために使う)
104
-
105
- 2. timeValue --- `time`の文字列を `timeValue()`で数値に変換した値 (この値の昇順でソートする)
106
-
107
-
108
-
109
- また、補助的な関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
110
-
111
-    
112
-
113
- 実装例として、上記の関数を使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下に試作してみました。
114
-
115
-
116
-
117
- [https://jsfiddle.net/jun68ykt/bw6o1ajx/67/](https://jsfiddle.net/jun68ykt/bw6o1ajx/67/)
118
-
119
-
120
-
121
- これは、前回のご質問の回答で作成した [https://jsfiddle.net/jun68ykt/bw6o1ajx/7/](https://jsfiddle.net/jun68ykt/bw6o1ajx/7/) に、今回の回答に合わせて適宜コードを追加、修正したものです。
122
-
123
-
124
-
125
-
126
-
127
- 以上、参考になりましたら幸いです。
128
-
129
-
130
-
131
-
132
-
133
- ---
134
-
135
- **追記**
136
-
137
-
138
-
139
- 上記のコードでは、 `reduce` の中に `forEach`があって、ちょっと読みにくいですね。
140
-
141
- [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
142
-
143
-
144
-
145
- ```javascript
146
-
147
- const sortedEventsOfBothTeams = (item) => {
148
-
149
-
150
-
151
- const allEvents = item.home_team_events.concat(item.away_team_events);
152
-
153
-
154
-
155
- const homeTeamEventIds = item.home_team_events.map(event => event.id);
156
-
157
-
158
-
159
- return allEvents
160
-
161
- .map(event => ({
162
-
163
- ...event,
164
-
165
- team: homeTeamEventIds.includes(event.id) ? 'home_team' : 'away_team',
166
-
167
- timeValue: timeValue(event.time),
168
-
169
- }))
170
-
171
- .sort((e1,e2) => e1.timeValue - e2.timeValue);
172
-
173
- };
174
-
175
- ```
176
-
177
-
178
-
179
- サンプル: [https://jsfiddle.net/jun68ykt/bw6o1ajx/79/](https://jsfiddle.net/jun68ykt/bw6o1ajx/79/)
180
-
181
-
182
-
183
- www-wwwさんのご質問の中に、
184
-
185
-
186
-
187
- > まずはやりたいこと1を実現したく、
188
-
189
-
190
-
191
- とありまして、上記のコードにおいては、 **やりたいこと1** の
192
-
193
-
194
-
195
- > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
196
-
197
-
198
-
199
- ことは kakajikaさんのご回答どおり、
200
-
201
-
202
-
203
- ```javascript
204
-
205
- const allEvents = item.home_team_events.concat(item.away_team_events);
206
-
207
- ```
208
-
209
-
210
-
211
199
  とする時点で完了していることになります。(なので kakajikaさんのご回答に +1)
212
200
 
213
201
 

23

テキスト修正

2018/08/25 13:07

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -216,7 +216,7 @@
216
216
 
217
217
 
218
218
 
219
- `item.home_team_events.concat(item.away_team_events);` **から始めても意図した動作をするコードにたどり着ける。**
219
+ `item.home_team_events.concat(item.away_team_events);` **から始めても意図した動作や表示実現するコードにたどり着ける。**
220
220
 
221
221
 
222
222
 

22

テキスト修正

2018/08/25 12:53

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,9 @@
136
136
 
137
137
 
138
138
 
139
- [kakajikaさんご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすきり書けるかもしれません。こちらでは、ソート出し分け用のプロパティ追加を後で行うことなり、たとえば以下のようになるしょう
139
+ 上記コードでは、 `reduce` の中に `forEach`があって、ちょっと読みくいすね
140
+
141
+ [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けそうです。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
140
142
 
141
143
 
142
144
 

21

テキスト修正

2018/08/25 12:51

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -200,7 +200,7 @@
200
200
 
201
201
  ```javascript
202
202
 
203
- item.home_team_events.concat(item.away_team_events);
203
+ const allEvents = item.home_team_events.concat(item.away_team_events);
204
204
 
205
205
  ```
206
206
 

20

テキスト修正

2018/08/25 12:29

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- kakajikaさんのご回答にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けるかもしれません。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
139
+ [kakajikaさんのご回答](https://teratail.com/questions/142691#reply-215670)にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けるかもしれません。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
140
140
 
141
141
 
142
142
 

19

テキスト修正

2018/08/25 12:24

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -178,7 +178,7 @@
178
178
 
179
179
 
180
180
 
181
- www-wwwさんのご質問に
181
+ www-wwwさんのご質問の中
182
182
 
183
183
 
184
184
 
@@ -186,16 +186,36 @@
186
186
 
187
187
 
188
188
 
189
+ とありまして、上記のコードにおいては、 **やりたいこと1** の
190
+
191
+
192
+
193
+ > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
194
+
195
+
196
+
189
- とありますが、上記のコードでは2つの配列を結合することは kakajikaさんのご回答どおり、
197
+ ことは kakajikaさんのご回答どおり、
190
198
 
191
199
 
192
200
 
193
201
  ```javascript
194
202
 
195
- const allEvents = item.home_team_events.concat(item.away_team_events);
203
+ item.home_team_events.concat(item.away_team_events);
196
204
 
197
205
  ```
198
206
 
199
207
 
200
208
 
201
209
  とする時点で完了していることになります。(なので kakajikaさんのご回答に +1)
210
+
211
+
212
+
213
+ この追記では、
214
+
215
+
216
+
217
+ `item.home_team_events.concat(item.away_team_events);` **から始めても意図した動作をするコードにたどり着ける。**
218
+
219
+
220
+
221
+ ことを示したかった次第です。

18

テキスト修正

2018/08/25 12:20

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -178,7 +178,7 @@
178
178
 
179
179
 
180
180
 
181
- ご質問に
181
+ www-wwwさんのご質問に
182
182
 
183
183
 
184
184
 
@@ -186,21 +186,13 @@
186
186
 
187
187
 
188
188
 
189
- とあり、
190
-
191
-
192
-
193
- > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
194
-
195
-
196
-
197
- ことは kakajikaさんのご回答どおり、
189
+ とありますが、上記のコードでは2つの配列を結合することは kakajikaさんのご回答どおり、
198
190
 
199
191
 
200
192
 
201
193
  ```javascript
202
194
 
203
- item.home_team_events.concat(item.away_team_events);
195
+ const allEvents = item.home_team_events.concat(item.away_team_events);
204
196
 
205
197
  ```
206
198
 

17

テキスト修正

2018/08/25 12:13

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -186,7 +186,7 @@
186
186
 
187
187
 
188
188
 
189
- とありますが上記の場合
189
+ とあり、
190
190
 
191
191
 
192
192
 
@@ -194,16 +194,16 @@
194
194
 
195
195
 
196
196
 
197
- kakajikaさんのご回答どおり、
197
+ こと kakajikaさんのご回答どおり、
198
198
 
199
199
 
200
200
 
201
201
  ```javascript
202
202
 
203
- const allEvents = item.home_team_events.concat(item.away_team_events);
203
+ item.home_team_events.concat(item.away_team_events);
204
204
 
205
205
  ```
206
206
 
207
207
 
208
208
 
209
- で完了していることになります。(なので kakajikaさんのご回答に +1)
209
+ とする時点で完了していることになります。(なので kakajikaさんのご回答に +1)

16

テキスト修正

2018/08/25 11:44

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -178,7 +178,15 @@
178
178
 
179
179
 
180
180
 
181
- 上記の場合、 ご質問にある
181
+ ご質問に
182
+
183
+
184
+
185
+ > まずはやりたいこと1を実現したく、
186
+
187
+
188
+
189
+ とありますが、上記の場合
182
190
 
183
191
 
184
192
 
@@ -198,4 +206,4 @@
198
206
 
199
207
 
200
208
 
201
- で完了していることになります。(なのでkakajikaさんのご回答に+1)
209
+ で完了していることになります。(なので kakajikaさんのご回答に +1)

15

テキスト修正

2018/08/25 11:26

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -198,4 +198,4 @@
198
198
 
199
199
 
200
200
 
201
- で完了していることになります。
201
+ で完了していることになります。(なので、kakajikaさんのご回答に+1)

14

テキスト修正

2018/08/25 11:18

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -186,7 +186,7 @@
186
186
 
187
187
 
188
188
 
189
- は、
189
+ は、kakajikaさんのご回答どおり、
190
190
 
191
191
 
192
192
 

13

テキスト修正

2018/08/25 11:06

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- kakajikaさんのご回答にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは結合した配列を作るところから始めるというのも良いです。むしろ、こちらのほうがすっきり書けるかもしれません。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
139
+ kakajikaさんのご回答にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは単に結合した配列を作るところから始めるほうがすっきり書けるかもしれません。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
140
140
 
141
141
 
142
142
 
@@ -156,17 +156,17 @@
156
156
 
157
157
  return allEvents
158
158
 
159
- .map(event => ({
159
+ .map(event => ({
160
-
160
+
161
- ...event,
161
+ ...event,
162
-
162
+
163
- team: homeTeamEventIds.includes(event.id) ? 'home_team' : 'away_team',
163
+ team: homeTeamEventIds.includes(event.id) ? 'home_team' : 'away_team',
164
-
164
+
165
- timeValue: timeValue(event.time),
165
+ timeValue: timeValue(event.time),
166
-
166
+
167
- }))
167
+ }))
168
-
168
+
169
- .sort((e1,e2) => e1.timeValue - e2.timeValue);
169
+ .sort((e1,e2) => e1.timeValue - e2.timeValue);
170
170
 
171
171
  };
172
172
 

12

テキスト修正

2018/08/25 10:53

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -150,7 +150,7 @@
150
150
 
151
151
 
152
152
 
153
- const homeTeamEventIds = new Set(item.home_team_events.map(event => event.id));
153
+ const homeTeamEventIds = item.home_team_events.map(event => event.id);
154
154
 
155
155
 
156
156
 
@@ -158,15 +158,15 @@
158
158
 
159
159
  .map(event => ({
160
160
 
161
- ...event,
161
+ ...event,
162
-
162
+
163
- team: homeTeamEventIds.has(event.id) ? 'home_team' : 'away_team',
163
+ team: homeTeamEventIds.includes(event.id) ? 'home_team' : 'away_team',
164
-
164
+
165
- timeValue: timeValue(event.time),
165
+ timeValue: timeValue(event.time),
166
-
166
+
167
- }))
167
+ }))
168
-
168
+
169
- .sort((e1,e2) => e1.timeValue - e2.timeValue);
169
+ .sort((e1,e2) => e1.timeValue - e2.timeValue);
170
170
 
171
171
  };
172
172
 
@@ -174,7 +174,7 @@
174
174
 
175
175
 
176
176
 
177
- サンプル: [https://jsfiddle.net/jun68ykt/bw6o1ajx/77/](https://jsfiddle.net/jun68ykt/bw6o1ajx/77/)
177
+ サンプル: [https://jsfiddle.net/jun68ykt/bw6o1ajx/79/](https://jsfiddle.net/jun68ykt/bw6o1ajx/79/)
178
178
 
179
179
 
180
180
 

11

テキスト修正

2018/08/25 10:51

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- kakajikaさんのご回答にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは結合した配列を作るところから始めるというのも良いです。場合は、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
139
+ kakajikaさんのご回答にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは結合した配列を作るところから始めるというのも良いです。むしろ、こちらほうがすっきり書けるかもしれません。こちらでは、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
140
140
 
141
141
 
142
142
 
@@ -198,4 +198,4 @@
198
198
 
199
199
 
200
200
 
201
- だけで完了していることになります。
201
+ で完了していることになります。

10

テキスト修正

2018/08/25 10:48

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- kakajikaさんのご回答にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは結合した配列を作るところから始めるというのもアリです。その場合は、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
139
+ kakajikaさんのご回答にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは結合した配列を作るところから始めるというのも良いです。その場合は、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
140
140
 
141
141
 
142
142
 
@@ -158,15 +158,15 @@
158
158
 
159
159
  .map(event => ({
160
160
 
161
- ...event,
161
+ ...event,
162
-
162
+
163
- team: homeTeamEventIds.has(event.id) ? 'home_team' : 'away_team',
163
+ team: homeTeamEventIds.has(event.id) ? 'home_team' : 'away_team',
164
-
164
+
165
- timeValue: timeValue(event.time),
165
+ timeValue: timeValue(event.time),
166
-
166
+
167
- }))
167
+ }))
168
-
168
+
169
- .sort((e1,e2) => e1.timeValue - e2.timeValue);
169
+ .sort((e1,e2) => e1.timeValue - e2.timeValue);
170
170
 
171
171
  };
172
172
 
@@ -175,3 +175,27 @@
175
175
 
176
176
 
177
177
  サンプル: [https://jsfiddle.net/jun68ykt/bw6o1ajx/77/](https://jsfiddle.net/jun68ykt/bw6o1ajx/77/)
178
+
179
+
180
+
181
+ 上記の場合、 ご質問にある
182
+
183
+
184
+
185
+ > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
186
+
187
+
188
+
189
+ は、
190
+
191
+
192
+
193
+ ```javascript
194
+
195
+ const allEvents = item.home_team_events.concat(item.away_team_events);
196
+
197
+ ```
198
+
199
+
200
+
201
+ だけで完了していることになります。

9

テキスト修正

2018/08/25 10:44

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -110,10 +110,6 @@
110
110
 
111
111
     
112
112
 
113
-
114
-
115
-
116
-
117
113
  実装例として、上記の関数を使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下に試作してみました。
118
114
 
119
115
 
@@ -129,3 +125,53 @@
129
125
 
130
126
 
131
127
  以上、参考になりましたら幸いです。
128
+
129
+
130
+
131
+
132
+
133
+ ---
134
+
135
+ **追記**
136
+
137
+
138
+
139
+ kakajikaさんのご回答にある、[concat](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使って、まずは結合した配列を作るところから始めるというのもアリですね。その場合は、ソートと出し分け用のプロパティ追加を後で行うことになり、たとえば以下のようになるでしょう。
140
+
141
+
142
+
143
+ ```javascript
144
+
145
+ const sortedEventsOfBothTeams = (item) => {
146
+
147
+
148
+
149
+ const allEvents = item.home_team_events.concat(item.away_team_events);
150
+
151
+
152
+
153
+ const homeTeamEventIds = new Set(item.home_team_events.map(event => event.id));
154
+
155
+
156
+
157
+ return allEvents
158
+
159
+ .map(event => ({
160
+
161
+ ...event,
162
+
163
+ team: homeTeamEventIds.has(event.id) ? 'home_team' : 'away_team',
164
+
165
+ timeValue: timeValue(event.time),
166
+
167
+ }))
168
+
169
+ .sort((e1,e2) => e1.timeValue - e2.timeValue);
170
+
171
+ };
172
+
173
+ ```
174
+
175
+
176
+
177
+ サンプル: [https://jsfiddle.net/jun68ykt/bw6o1ajx/77/](https://jsfiddle.net/jun68ykt/bw6o1ajx/77/)

8

テキスト修正

2018/08/25 10:34

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -96,15 +96,9 @@
96
96
 
97
97
 
98
98
 
99
- というものです。詳細なところ補足しますと、以下の2点です。
99
+ というもので、結合した配列作るきに、以下の2つのプロパティを追加しています。
100
100
 
101
101
 
102
-
103
- - 関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
104
-
105
-    
106
-
107
- - 結合した配列を作るときに、以下の2つのプロパティを追加
108
102
 
109
103
  1. team --- 文字列`"home_team"` または `"away_team"` (後で `タグの出し分け` のために使う)
110
104
 
@@ -112,13 +106,15 @@
112
106
 
113
107
 
114
108
 
115
-   
109
+ また、補助的な関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
116
110
 
117
-   
111
+    
118
112
 
119
113
 
120
114
 
115
+
116
+
121
- 上記のコードを使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下に試作してみました。
117
+ 実装例として、上記の関数を使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下に試作してみました。
122
118
 
123
119
 
124
120
 

7

テキスト修正

2018/08/25 09:22

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,9 +2,29 @@
2
2
 
3
3
 
4
4
 
5
- 結合た後に `2. timeを基準にソート` でき、かつホームチームかアウェイチームかによって、`3. タグの出し分け` が出来るように 2つのteam_events配列を結合する必要があります。
5
+ www-wwwさんがやりたいこととして
6
6
 
7
+
8
+
9
+ > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
10
+
11
+ > 2. timeを基準にソートし、各チームeventをオブジェクト?に入れる
12
+
13
+ > 3. 連結したオブジェクトを見てタグの出し分けをしたい
14
+
15
+
16
+
17
+ とのことですので、ご質問の主旨としては、
18
+
19
+
20
+
21
+ **2つのteam_events配列を結合した後に** `2. timeを基準にソート` **でき、かつホームチームかアウェイチームかによって** `3. タグの出し分け` ** (表の中でどの列に表示すべきかの判断)が出来るように結合するには、どうしたらいいか?**
22
+
23
+
24
+
25
+ ということと把握しました。
26
+
7
- その点を踏まえて、解法の一例を以下に示します。
27
+ 上記を踏まえて、解法の一例を以下に示します。
8
28
 
9
29
 
10
30
 
@@ -64,7 +84,41 @@
64
84
 
65
85
 
66
86
 
67
- 上記の `sortedEventsOfBothTeams(item)` は、 `reduce` と `forEach`を使って (**やりいこと2** と **3** 可能にるよう、) **やたいこと1** を行い、続けて`sort`によって **やりたいこと2** でを完了させつつ、**やりたいこと3** で使うプロパティも追加る関数です。これを使ったサンプルとして、両チームのイベントを `<table>` として時系列に render するコードを以下に作成しました。
87
+ 上記の `sortedEventsOfBothTeams(item)` が結合され配列関数ります。これ
88
+
89
+
90
+
91
+ - [reduce()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) と [forEach()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)を使って (**やりたいこと2** と **3** を可能にするように、) **やりたいこと1** を行い、
92
+
93
+    
94
+
95
+ - さらに、[sort()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)によって **やりたいこと2** までを完了させる
96
+
97
+
98
+
99
+ というものです。詳細なところを補足しますと、以下の2点です。
100
+
101
+
102
+
103
+ - 関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
104
+
105
+    
106
+
107
+ - 結合した配列を作るときに、以下の2つのプロパティを追加
108
+
109
+ 1. team --- 文字列`"home_team"` または `"away_team"` (後で `タグの出し分け` のために使う)
110
+
111
+ 2. timeValue --- `time`の文字列を `timeValue()`で数値に変換した値 (この値の昇順でソートする)
112
+
113
+
114
+
115
+   
116
+
117
+   
118
+
119
+
120
+
121
+ 上記のコードを使ったサンプルとして、両チームのイベントを `<table>` として時系列に表示するコードを以下に試作してみました。
68
122
 
69
123
 
70
124
 
@@ -72,27 +126,7 @@
72
126
 
73
127
 
74
128
 
75
- (※上記は、前回のご質問の回答で作成した[https://jsfiddle.net/jun68ykt/bw6o1ajx/7/](https://jsfiddle.net/jun68ykt/bw6o1ajx/7/) に、適宜コードを追加、修正したものです。
129
+ これは、前回のご質問の回答で作成した [https://jsfiddle.net/jun68ykt/bw6o1ajx/7/](https://jsfiddle.net/jun68ykt/bw6o1ajx/7/) に、今回の回答に合わせて適宜コードを追加、修正したものです。
76
-
77
-
78
-
79
- 上記のコードに補足説明しますと、
80
-
81
-
82
-
83
- - 関数`timeValue()` はレスポンスで返される発生時間の文字列、たとえば `"55'"` を、 数値の`55`に変換する関数です。アディショナルタイムに入ってからの表記 `"90'+3"` も数値の `93` に変換されるように作成しています。
84
-
85
-
86
-
87
- - 結合した配列を作るときに、以下の2つのプロパティを追加しています。
88
-
89
- 1. team --- 文字列`"home_team"` または `"away_team"` (後で `タグの出し分け` のために使う)
90
-
91
- 2. timeValue --- `time`の文字列を `timeValue()`で数値に変換した値 (この値の昇順でソートする)
92
-
93
-
94
-
95
-
96
130
 
97
131
 
98
132
 

6

テキスト修正

2018/08/25 09:19

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,23 +2,9 @@
2
2
 
3
3
 
4
4
 
5
- ご質問
5
+ 結合した後 `2. timeを基準にソート` でき、かつホームチームかアウェイチームかによって、`3. タグの出し分け` が出来るように 2つのteam_events配列を結合する必要があります。
6
6
 
7
-
8
-
9
- > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
10
-
11
- > 2. timeを基準にソートし、各チームeventをオブジェクト?に入れる
12
-
13
- > 3. 連結したオブジェクトを見てタグの出し分けをしたい
14
-
15
-
16
-
17
- とありますので、結合した後に、`timeを基準にソート` でき、かつ ホームチームかアウェイチームかによって、`タグの出し分け` が出来るように 2つのteam_eventsを結合する必要がありそうです。
18
-
19
-
20
-
21
- 上記を踏まえて、解法の一例を以下に示します。
7
+ その点を踏まえて、解法の一例を以下に示します。
22
8
 
23
9
 
24
10
 
@@ -78,7 +64,7 @@
78
64
 
79
65
 
80
66
 
81
- 上記の `sortedEventsOfBothTeams(item)` は、 `reduce` と `forEach`を使って (**やりたいこと2** と **3** を可能にするように、) **やりたいこと1** を行い、続けて`sort`によって **やりたいこと2** までを完了させつつ、**やりたいこと3** で使うプロパティも追加する関数です。これを使ったサンプルとして、イベントを `<table>` として render するコードを以下に作成しました。
67
+ 上記の `sortedEventsOfBothTeams(item)` は、 `reduce` と `forEach`を使って (**やりたいこと2** と **3** を可能にするように、) **やりたいこと1** を行い、続けて`sort`によって **やりたいこと2** までを完了させつつ、**やりたいこと3** で使うプロパティも追加する関数です。これを使ったサンプルとして、両チームのイベントを `<table>` として時系列に render するコードを以下に作成しました。
82
68
 
83
69
 
84
70
 

5

テキスト修正

2018/08/25 06:05

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -15,16 +15,6 @@
15
15
 
16
16
 
17
17
  とありますので、結合した後に、`timeを基準にソート` でき、かつ ホームチームかアウェイチームかによって、`タグの出し分け` が出来るように 2つのteam_eventsを結合する必要がありそうです。
18
-
19
- つまり、
20
-
21
-
22
-
23
- > まずはやりたいこと1を実現したく、
24
-
25
-
26
-
27
- とのことですが、**やりたいこと1** の配列の結合は、**やりたいこと2** と **3** が出来るよう行う必要があり、逆にいえば、**やりたいこと1** がうまく出来てしまえば、あとは、**やりたいこと2** と **3** はあまり考えずにやれる作業かなと思います。
28
18
 
29
19
 
30
20
 

4

テキスト修正

2018/08/25 06:01

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- 上記の `sortedEventsOfBothTeams(item)` は、 `reduce` と `forEach`を使って (**やりたいこと2** と **3** を可能にするように、) **やりたいこと1** を行い、続けて`sort`によって **やりたいこと2** までを完了させつつ、**やりたいこと3** で使うプロパティも追加する関数です。これを使ったサンプルとして、イベントを `<table>` として render するコードを以下に作成しました。
91
+ 上記の `sortedEventsOfBothTeams(item)` は、 `reduce` と `forEach`を使って (**やりたいこと2** と **3** を可能にするように、) **やりたいこと1** を行い、続けて`sort`によって **やりたいこと2** までを完了させつつ、**やりたいこと3** で使うプロパティも追加する関数です。これを使ったサンプルとして、イベントを `<table>` として render するコードを以下に作成しました。
92
92
 
93
93
 
94
94
 

3

テキスト修正

2018/08/25 05:45

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- とのことですが、**やりたいこと1** は、**やりたいこと2** と **3** が出来るように結合する必要があり、逆にいえば、**やりたいこと1** が出来てしまえば、**やりたいこと2** と **3** はあまり考えずにやれる作業かなと思います
27
+ とのことですが、**やりたいこと1** の配列の結合は、**やりたいこと2** と **3** が出来るよう行う必要があり、逆にいえば、**やりたいこと1** がうまく出来てしまえば、あとは、**やりたいこと2** と **3** はあまり考えずにやれる作業かなと思います
28
28
 
29
29
 
30
30
 

2

テキスト修正

2018/08/25 05:43

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -15,6 +15,16 @@
15
15
 
16
16
 
17
17
  とありますので、結合した後に、`timeを基準にソート` でき、かつ ホームチームかアウェイチームかによって、`タグの出し分け` が出来るように 2つのteam_eventsを結合する必要がありそうです。
18
+
19
+ つまり、
20
+
21
+
22
+
23
+ > まずはやりたいこと1を実現したく、
24
+
25
+
26
+
27
+ とのことですが、**やりたいこと1** は、**やりたいこと2** と **3** が出来るように結合する必要があり、逆にいえば、**やりたいこと1** が出来てしまえば、**やりたいこと2** と **3** はあまり考えずにやれる作業かなと思います、
18
28
 
19
29
 
20
30
 
@@ -78,7 +88,7 @@
78
88
 
79
89
 
80
90
 
81
- 上記を使ったサンプルとして、イベントを `<table>` として render するコードを以下に作成しました。
91
+ 上記の `sortedEventsOfBothTeams(item)` は、 `reduce` と `forEach`を使って (**やりいこと2** と **3** を可能すにするように、) **やりたいこと1** を行い、続けて`sort`によって **やりたいこと2** までを完了させつつ、**やりたいこと3** で使うプロパティも追加する関数です。これを使ったサンプルとして、イベントを `<table>` として render するコードを以下に作成しました。
82
92
 
83
93
 
84
94
 
@@ -91,10 +101,6 @@
91
101
 
92
102
 
93
103
  上記のコードに補足説明しますと、
94
-
95
-
96
-
97
- - 二つの配列から一つの配列を作るために `reduce`と `forEach`を使い、ソートには `sort`を使っています。
98
104
 
99
105
 
100
106
 

1

テキスト修正

2018/08/25 05:41

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,25 +2,19 @@
2
2
 
3
3
 
4
4
 
5
- ご質問にある要件を整理すると、以下のようにまとめられるかなと思いました。
5
+ ご質問に
6
6
 
7
7
 
8
8
 
9
- - 以下の2点を満たす、`home_team_events` `away_team_events` とを結合した配列を作りたい。
9
+ > 1. home_team_eventsとaway_team_eventsを取得し、2つのteam_eventを結合する
10
+
11
+ > 2. timeを基準にソートし、各チームeventをオブジェクト?に入れる
12
+
13
+ > 3. 連結したオブジェクトを見てタグの出し分けをしたい
10
14
 
11
15
 
12
16
 
13
- 1. 配列要素である各イベントの発生時刻(試合開始からの経過時間)の早い順でソートされている。
14
-
15
-
16
-
17
- 2. 配列要素ある各イベントその発生元がホームチームのなのかアウェイチーム判別できプロパティ持つ
17
+ とありますの、結合した後に、`timeを基準にソート` でき、かつ ホームチームかアウェイチームかによって、`タグ出し分け` 出来ように 2つのteam_events結合する必要がありそうです
18
-
19
-
20
-
21
-
22
-
23
-  
24
18
 
25
19
 
26
20
 
@@ -84,7 +78,7 @@
84
78
 
85
79
 
86
80
 
87
- 上記を使って、イベントを時系列に `<table>` として render するコードを以下に作成しました。
81
+ 上記を使ったサンプルとして、イベントを `<table>` として render するコードを以下に作成しました。
88
82
 
89
83
 
90
84
 
@@ -96,7 +90,11 @@
96
90
 
97
91
 
98
92
 
99
- 上記のコードに補足説明すと、
93
+ 上記のコードに補足説明しますと、
94
+
95
+
96
+
97
+ - 二つの配列から一つの配列を作るために `reduce`と `forEach`を使い、ソートには `sort`を使っています。
100
98
 
101
99
 
102
100
 
@@ -106,13 +104,13 @@
106
104
 
107
105
  - 結合した配列を作るときに、以下の2つのプロパティを追加しています。
108
106
 
109
- 1. team --- 文字列`"home_team"` または `"away_team"`
107
+ 1. team --- 文字列`"home_team"` または `"away_team"` (後で `タグの出し分け` のために使う)
110
108
 
111
- 2. timeValue --- `time`の文字列を `timeValue()`で数値に変換した値
109
+ 2. timeValue --- `time`の文字列を `timeValue()`で数値に変換した値 (この値の昇順でソートする)
112
110
 
113
111
 
114
112
 
115
- - 二つの配列から一つの配列を作るために `reduce`と `forEach`を使い、ソートには `sort`を使っています。
113
+
116
114
 
117
115
 
118
116