teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

36

テキスト修正

2018/09/16 01:34

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -182,4 +182,4 @@
182
182
  ```
183
183
  **サンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/16/](https://jsfiddle.net/jun68ykt/tycq3g28/16/)
184
184
 
185
- 上記の `slice` と `concat`を使った `orderBy` で事足りるということだと、ソートするとか rotateさせか、ちょ込み入ったことをする必要はありませんでした
185
+ 上記の `slice` と `concat`を使った `orderBy` で事足りるということだと、sort させたり、 rotateさせたり込み入ったことをする必要はありませんでした。あとは、もともと `hoge`が date でソートされているかどうか、といった要件しだいで、お好みの方法を比較検討して頂ければと思います。

35

テキスト修正

2018/09/16 01:34

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -115,7 +115,7 @@
115
115
 
116
116
  ---
117
117
 
118
- **追記**
118
+ **追記1**
119
119
 
120
120
  長々と 回答(1)、(2)を書いてしまいましたが、もう少し見通しのいいコードで書けたので以下に追記します。
121
121
 
@@ -160,4 +160,26 @@
160
160
 
161
161
  以下、この `orderBy` を使ったサンプルです。
162
162
 
163
- [https://jsfiddle.net/jun68ykt/tycq3g28/15/](https://jsfiddle.net/jun68ykt/tycq3g28/15/)
163
+ [https://jsfiddle.net/jun68ykt/tycq3g28/15/](https://jsfiddle.net/jun68ykt/tycq3g28/15/)
164
+
165
+
166
+ ---
167
+
168
+ **追記2**
169
+
170
+ 上記、追記1 の `orderBy` は、以下のようにも書けます。
171
+
172
+ ```javascript
173
+ hoge.orderBy = function(baseDate) {
174
+
175
+ if ( 1 <= baseDate && baseDate < this.length )
176
+ return this.slice(this.length - baseDate)
177
+ .concat(this.slice(0, this.length - baseDate));
178
+
179
+ return [...this];
180
+
181
+ };
182
+ ```
183
+ **サンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/16/](https://jsfiddle.net/jun68ykt/tycq3g28/16/)
184
+
185
+ 上記の `slice` と `concat`を使った `orderBy` で事足りるということだと、ソートするとか rotateさせるとか、ちょっと込み入ったことをする必要はありませんでしたね。

34

テキスト修正

2018/09/16 01:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -135,14 +135,12 @@
135
135
 
136
136
  ```
137
137
  hoge.orderBy = function(baseDate) {
138
- let that;
138
+ const that = [...this];
139
+
139
- if ( 1 <= baseDate && baseDate < this.length ) {
140
+ if ( 1 <= baseDate && baseDate < this.length )
140
- that = [...this];
141
- for ( i = 0; i < this.length - baseDate; ++ i )
141
+ for ( i = 0; i < this.length - baseDate; ++ i )
142
- that.push(that.shift())
142
+ that.push(that.shift());
143
- } else {
143
+
144
- that = this;
145
- }
146
144
  return that;
147
145
  };
148
146
  ```
@@ -162,4 +160,4 @@
162
160
 
163
161
  以下、この `orderBy` を使ったサンプルです。
164
162
 
165
- [https://jsfiddle.net/jun68ykt/tycq3g28/11/](https://jsfiddle.net/jun68ykt/tycq3g28/11/)
163
+ [https://jsfiddle.net/jun68ykt/tycq3g28/15/](https://jsfiddle.net/jun68ykt/tycq3g28/15/)

33

テキスト修正

2018/09/16 00:57

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -110,4 +110,56 @@
110
110
 
111
111
  なお、`[...ary]`としているところを、単に `ary` としてしまうと、 `rotateByBaseDate(hoge, 4)` としたときに `hoge`自体が変更されてしまって、引き続き、 `rotateByBaseDate(hoge, 5)` としたときに、望ましい結果にならなくなってしまうので、これを避けるために`[...ary]` として `ary` のコピーに対して [Array.prototype.rotate](https://stackoverflow.com/a/1985471)を使っています。
112
112
 
113
- 以上、参考になれば幸いです。
113
+ 以上、参考になれば幸いです。
114
+
115
+
116
+ ---
117
+
118
+ **追記**
119
+
120
+ 長々と 回答(1)、(2)を書いてしまいましたが、もう少し見通しのいいコードで書けたので以下に追記します。
121
+
122
+ 配列 `hoge`
123
+ ```javascript
124
+ const hoge = [
125
+ { date:"7", status:"C" },
126
+ { date:"6", status:"B" },
127
+ { date:"5", status:"D" },
128
+ { date:"4", status:"B" },
129
+ { date:"3", status:"A" },
130
+ { date:"2", status:"C" },
131
+ { date:"1", status:"A" }
132
+ ];
133
+ ```
134
+ に以下のようなメソッドを追加します。
135
+
136
+ ```
137
+ hoge.orderBy = function(baseDate) {
138
+ let that;
139
+ if ( 1 <= baseDate && baseDate < this.length ) {
140
+ that = [...this];
141
+ for ( i = 0; i < this.length - baseDate; ++ i )
142
+ that.push(that.shift())
143
+ } else {
144
+ that = this;
145
+ }
146
+ return that;
147
+ };
148
+ ```
149
+
150
+ この `orderBy` を使うことで、たとえば `baseDate` に 4 を指定して並べ替えた配列 `hoge4` を得るには、
151
+
152
+ ```javascript
153
+ const hoge4 = hoge.orderBy(4);
154
+ ```
155
+
156
+ とすればよいです。この`orderBy`は、 `hoge` の順序は変更しないので、続けて
157
+ ```javascript
158
+ const hoge2 = hoge.orderBy(2);
159
+ ```
160
+ などとしても、望ましい結果が返ります。
161
+
162
+
163
+ 以下、この `orderBy` を使ったサンプルです。
164
+
165
+ [https://jsfiddle.net/jun68ykt/tycq3g28/11/](https://jsfiddle.net/jun68ykt/tycq3g28/11/)

32

テキスト修正

2018/09/16 00:50

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -22,7 +22,7 @@
22
22
  { date:"1", status:"A" }
23
23
  ];
24
24
  ```
25
- の各要素の `date` プロパティを整数に変換した値を引いた差を要素とする配列
25
+ の各要素の `date` プロパティを整数に変換した値) を引いた差配列
26
26
  ```javascript
27
27
  [-3, -2, -1, 0, 1, 2, 3]; // = [ 4-"7", 4-"6", 4-"5", 4-"4", 4-"3", 4-"2", 4-"1" ]
28
28
  ```

31

テキスト修正

2018/09/15 23:37

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -24,7 +24,7 @@
24
24
  ```
25
25
  の各要素の `date` プロパティを整数に変換した値を引いた差を要素とする配列
26
26
  ```javascript
27
- [-3, -2, -1, 0, 1, 2, 3];
27
+ [-3, -2, -1, 0, 1, 2, 3]; // = [ 4-"7", 4-"6", 4-"5", 4-"4", 4-"3", 4-"2", 4-"1" ]
28
28
  ```
29
29
  を、以下のように並び替えるにはどうしたらいいか? という問題に帰着します。
30
30
  ```javascript

30

テキスト修正

2018/09/15 23:32

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -63,8 +63,7 @@
63
63
 
64
64
  - **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/6zqrL49a/1/](https://jsfiddle.net/jun68ykt/6zqrL49a/1/)
65
65
 
66
-  
67
-  
66
+
68
67
  なお上記の比較関数によるソートは、 与えられる配列`hoge` が、 `date`でソートされていなくても望む結果が得られます。たとえば `hoge` が
69
68
 
70
69
  ```javascript

29

テキスト修正

2018/09/15 23:19

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -61,7 +61,7 @@
61
61
  このように、 `compare` と `sortByBaseDate` を用意しておくと、 `sortByBaseDate(hoge, 4)` によって、`hoge` が望ましい状態に並び替えられます。
62
62
 
63
63
 
64
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/6zqrL49a/1/](https://jsfiddle.net/jun68ykt/6zqrL49a/1/)
64
+ - **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/6zqrL49a/1/](https://jsfiddle.net/jun68ykt/6zqrL49a/1/)
65
65
 
66
66
   
67
67
   
@@ -81,7 +81,7 @@
81
81
 
82
82
  であった場合のサンプルが以下です。
83
83
 
84
- `hoge` **が ** `date` **でソートされていない例:**[https://jsfiddle.net/jun68ykt/6zqrL49a/2/](https://jsfiddle.net/jun68ykt/6zqrL49a/2/)
84
+ - `hoge` **が ** `date` **でソートされていない例:**[https://jsfiddle.net/jun68ykt/6zqrL49a/2/](https://jsfiddle.net/jun68ykt/6zqrL49a/2/)
85
85
 
86
86
 
87
87
  ## (2) 配列の回転(rotate)を使う
@@ -103,11 +103,11 @@
103
103
  ```
104
104
 
105
105
  を作っておいて、 `rotateByBaseDate(hoge, 4)` とすれば望む配列が得られます。
106
- 以下この `rotateByBaseDate` を使うサンプルコードを作成しました。
106
+ 以下、サンプルを作成しました。  
107
107
 
108
- ** 配列をrotateさせるサンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/8/](https://jsfiddle.net/jun68ykt/tycq3g28/8/)
108
+ - ** 配列をrotateさせるサンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/8/](https://jsfiddle.net/jun68ykt/tycq3g28/8/)      
109
109
 
110
- 上記のコードでは、初めに `baseDate` を 4 として並べ替え、次に 5 で並べ替えます。
110
+  上記のコードでは、初めに `baseDate` を 4 として並べ替え、次に 5 で並べ替えます。
111
111
 
112
112
  なお、`[...ary]`としているところを、単に `ary` としてしまうと、 `rotateByBaseDate(hoge, 4)` としたときに `hoge`自体が変更されてしまって、引き続き、 `rotateByBaseDate(hoge, 5)` としたときに、望ましい結果にならなくなってしまうので、これを避けるために`[...ary]` として `ary` のコピーに対して [Array.prototype.rotate](https://stackoverflow.com/a/1985471)を使っています。
113
113
 

28

テキスト修正

2018/09/15 22:58

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -86,9 +86,9 @@
86
86
 
87
87
  ## (2) 配列の回転(rotate)を使う
88
88
 
89
- 上記の回答(1) は、与えられる配列`hoge` が date でソートされていなくても望結果を得るための回答でしたが、`hoge`の要素`date`の降順にソートされているは前提条件であるならば、配列 `hoge` を回転(rotate)させた配列を作るにはどうしたらいいか?という問題と考えることができます。
89
+ 上記の回答(1) は、初めに与えられる配列`hoge` が date でソートされていなくても望ましい結果を得るための回答でしたが、前提条件として`hoge`の要素`date`の降順にソートされているとるならば、配列 `hoge` を回転(rotate)させた配列を作るにはどうしたらいいか?という問題と考えることができます。
90
90
 
91
- 配列をrotateさせるためのコードは、以下の質問の回答に挙げられています。
91
+ 配列を回転(rotateさせるためのコードは、以下の質問の回答に挙げられています。
92
92
 
93
93
  - stackoverflow.com: [JavaScript Array rotate()](https://stackoverflow.com/questions/1985260/javascript-array-rotate)
94
94
 
@@ -96,22 +96,19 @@
96
96
 
97
97
  [https://stackoverflow.com/a/1985471](https://stackoverflow.com/a/1985471)
98
98
 
99
- の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) をお借りして、`baseDate`が 4 の場合は、`hoge` の要素の中で date が "4"である要素を先頭にもってくるために、3回 rotate すればよいので、
99
+ の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) をお借りすることにして、たとえば、`baseDate`が 4 の場合は、`hoge` の要素の中で date が "4"である要素を先頭にもってくるために、3回 rotate すればよいので、
100
100
 
101
101
  ```javascript
102
102
  const rotateByBaseDate = (ary, baseDate) => [...ary].rotate(ary.length - baseDate);
103
103
  ```
104
104
 
105
105
  を作っておいて、 `rotateByBaseDate(hoge, 4)` とすれば望む配列が得られます。
106
-  
107
- なお、上記のコードで`[...ary]`としているところを、単に `ary` としてしまうと、 `rotateByBaseDate(hoge, 4)` としたときに `hoge`自体が変更されてしまって、引き続き、たとえば `rotateByBaseDate(hoge, 5)` とすると望む結果にならなくなってしまうので、これを避けるために`[...ary]` として `ary` のコピーに対して [Array.prototype.rotate](https://stackoverflow.com/a/1985471)を使っています。
106
+ 以下に、この `rotateByBaseDate` を使うサンプルコードを作成しました。
108
107
 
109
-
110
- 上記の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) と`rotateByBaseDate` を使って、初めに `baseDate` を 4 として並べ替え、次に 5 で並べ替えるサンプルを以下に作成しました。
111
-
112
108
  ** 配列をrotateさせるサンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/8/](https://jsfiddle.net/jun68ykt/tycq3g28/8/)
113
109
 
110
+ 上記のコードでは、初めに `baseDate` を 4 として並べ替え、次に 5 で並べ替えます。
114
111
 
115
-   
112
+ なお、`[...ary]`としているところを、単に `ary` としてしまうと、 `rotateByBaseDate(hoge, 4)` としたときに `hoge`自体が変更されてしまって、引き続き、 `rotateByBaseDate(hoge, 5)` としたときに、望ましい結果にならなくなってしまうので、これを避けるために`[...ary]` として `ary` のコピーに対して [Array.prototype.rotate](https://stackoverflow.com/a/1985471)を使っています。
116
113
 
117
114
  以上、参考になれば幸いです。

27

テキスト修正

2018/09/15 14:40

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  このご質問でeeengineeeeeeerさんが要望されている並べ替えを実現するために、異なる2つのアプローチがあると思いましたので、それぞれ以下の(1)、(2)として回答します。
4
4
 
5
- なお、以下の回答では、並べ替えた結果、先頭にくる要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。ご質問の例:
5
+ なお、以下の回答では、並べ替えた結果、先頭にくるべき要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。ご質問の例:
6
6
 
7
7
  > たとえば任意の値を4としたとき
8
8
 
9
- では、`baseDate` 4 ということになります。
9
+ では、`baseDate`として 4 を指定する、ということになります。
10
10
 
11
11
  ## (1) [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う。
12
12
 

26

テキスト修正

2018/09/15 05:56

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- このご質問でeeengineeeeeeerさんが要望されている並べ替えを実現するために、異なる2つのアプローチがあると思いましたそれ以下の(1)、(2)回答します。
3
+ このご質問でeeengineeeeeeerさんが要望されている並べ替えを実現するために、異なる2つのアプローチがあると思いましたので、それぞれ以下の(1)、(2)として回答します。
4
4
 
5
5
  なお、以下の回答では、並べ替えた結果、先頭にくる要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。ご質問の例:
6
6
 

25

テキスト修正

2018/09/15 05:23

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- 以下、異なる考え方、方法による2つの方法を回答します。
3
+ このご質問でeeengineeeeeeerさんが要望されている並べ替えを実現するために、異なる2つのアプローチがあると思いました。それ以下の(1)、(2) で回答します。
4
4
 
5
5
  なお、以下の回答では、並べ替えた結果、先頭にくる要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。ご質問の例:
6
6
 

24

テキスト修正

2018/09/15 04:57

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -86,7 +86,7 @@
86
86
 
87
87
  ## (2) 配列の回転(rotate)を使う
88
88
 
89
- 上記の回答(1) は、与えられる配列`hoge` が date でソートされていなくても望む結果を得るための回答でしたが、`hoge`の要素が`date`の降順にソートされていることは前提条件であるならば、配列を回転(rotate)させればよいです。
89
+ 上記の回答(1) は、与えられる配列`hoge` が date でソートされていなくても望む結果を得るための回答でしたが、`hoge`の要素が`date`の降順にソートされていることは前提条件であるならば、配列 `hoge` を回転(rotate)させた配列を作るにはどうしたらいか?という問題と考えることがきます。
90
90
 
91
91
  配列をrotateさせるためのコードは、以下の質問の回答に挙げられています。
92
92
 
@@ -96,7 +96,7 @@
96
96
 
97
97
  [https://stackoverflow.com/a/1985471](https://stackoverflow.com/a/1985471)
98
98
 
99
- の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) を借しますと、`baseDate`が 4 の場合は、`hoge` の要素の中で date が "4"である要素を先頭にもってくるために、3回 rotate すればよいので、
99
+ の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) を、`baseDate`が 4 の場合は、`hoge` の要素の中で date が "4"である要素を先頭にもってくるために、3回 rotate すればよいので、
100
100
 
101
101
  ```javascript
102
102
  const rotateByBaseDate = (ary, baseDate) => [...ary].rotate(ary.length - baseDate);

23

テキスト修正

2018/09/15 03:04

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -107,7 +107,7 @@
107
107
  なお、上記のコードで`[...ary]`としているところを、単に `ary` としてしまうと、 `rotateByBaseDate(hoge, 4)` としたときに `hoge`自体が変更されてしまって、引き続き、たとえば `rotateByBaseDate(hoge, 5)` とすると望む結果にならなくなってしまうので、これを避けるために`[...ary]` として `ary` のコピーに対して [Array.prototype.rotate](https://stackoverflow.com/a/1985471)を使っています。
108
108
 
109
109
 
110
- 上記の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) と`rotateByBaseDate` を使って、初めに 基準値 "4" 並べ替え、次に基準値 "5" で並べ替えるサンプルを以下に作成しました。
110
+ 上記の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) と`rotateByBaseDate` を使って、初めに `baseDate` 4 として並べ替え、次に 5 で並べ替えるサンプルを以下に作成しました。
111
111
 
112
112
  ** 配列をrotateさせるサンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/8/](https://jsfiddle.net/jun68ykt/tycq3g28/8/)
113
113
 

22

テキスト修正

2018/09/15 02:57

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -81,7 +81,7 @@
81
81
 
82
82
  であった場合のサンプルが以下です。
83
83
 
84
- 初めに与えられる`hoge` **が ** `date` **でソートされていない例:** [https://jsfiddle.net/jun68ykt/6zqrL49a/2/](https://jsfiddle.net/jun68ykt/6zqrL49a/2/)
84
+ `hoge` **が ** `date` **でソートされていない例:**[https://jsfiddle.net/jun68ykt/6zqrL49a/2/](https://jsfiddle.net/jun68ykt/6zqrL49a/2/)
85
85
 
86
86
 
87
87
  ## (2) 配列の回転(rotate)を使う

21

テキスト修正

2018/09/15 02:51

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -31,7 +31,7 @@
31
31
  [0, 1, 2, 3, -3, -2, -1];
32
32
  ```
33
33
 
34
- 上記のようなソートを行うための比較関数 `compare(a, b)` の一例が以下です。(他の書き方もあるょう。)
34
+ 上記のようなソートを行うための比較関数 `compare(a, b)` の一例が以下です。(他のより良い書き方もあるかもれません。)
35
35
 
36
36
  ```javascript
37
37
  const compare = (a, b) => {

20

テキスト修正

2018/09/15 02:48

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -58,10 +58,10 @@
58
58
  ary.sort((e1,e2) => compare(baseDate - e1.date, baseDate - e2.date));
59
59
  ```
60
60
 
61
- このように、 `compare` と `sortByBaseDate` を用意しておくと、 `sortByBaseDate(hoge, 4)` で望む配列られます。
61
+ このように、 `compare` と `sortByBaseDate` を用意しておくと、 `sortByBaseDate(hoge, 4)` によって、`hoge` 望ましい状態に並び替えられます。
62
62
 
63
63
 
64
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/fr2snba7/1/](https://jsfiddle.net/jun68ykt/fr2snba7/1/)
64
+ **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/6zqrL49a/1/](https://jsfiddle.net/jun68ykt/6zqrL49a/1/)
65
65
 
66
66
   
67
67
   
@@ -81,7 +81,7 @@
81
81
 
82
82
  であった場合のサンプルが以下です。
83
83
 
84
- `hoge` **が** `date` **でソートされていない例:** [https://jsfiddle.net/jun68ykt/fr2snba7/2/](https://jsfiddle.net/jun68ykt/fr2snba7/2/)
84
+ 初めに与えられる`hoge` **が ** `date` **でソートされていない例:** [https://jsfiddle.net/jun68ykt/6zqrL49a/2/](https://jsfiddle.net/jun68ykt/6zqrL49a/2/)
85
85
 
86
86
 
87
87
  ## (2) 配列の回転(rotate)を使う

19

テキスト修正

2018/09/15 02:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -31,25 +31,8 @@
31
31
  [0, 1, 2, 3, -3, -2, -1];
32
32
  ```
33
33
 
34
- 上記のようなソートを行うための比較関数 `compare(a, b)` は、以下を満たせばよいです。
34
+ 上記のようなソートを行うための比較関数 `compare(a, b)` の一例が以下です。(他の書き方もあるでしょう。)
35
35
 
36
- ```
37
- if ( a が 0 )
38
- 負の数を返す。
39
-
40
- if ( b が 0 )
41
-  正の数を返す。
42
-
43
- if ( a と b は異符号 )
44
- b が負の数なら、負の数を返し、そうでないなら正の数を返す。
45
-
46
- 上記以外であれば、 a - b を返す。
47
- ```
48
-
49
- 上記のロジックを言葉で説明すると、 二つの整数 `a` 、 `b` の比較関数 `compare(a, b)` は、通常ではただ単に `a - b` を返せば済むところを、このご質問の要件を満たすためには、 `a`または`b`が 0 である場合の処理と、 `a`と `b`とが異符号である場合の処理を、 `a - b` を返す前に行う必要がある、ということになります。
50
-
51
- 上記の考え方で作成した `compare(a,b)` が以下です。
52
-
53
36
  ```javascript
54
37
  const compare = (a, b) => {
55
38
 
@@ -64,13 +47,18 @@
64
47
  return a - b;
65
48
 
66
49
  };
50
+ ```
67
51
 
52
+ 上記のロジックを言葉で説明すると、 二つの整数 `a` 、 `b` の比較関数 `compare(a, b)` は、通常ではただ単に `a - b` を返せば済むところを、このご質問の要件を満たすためには、 `a`または`b`が 0 である場合の処理と、 `a`と `b`とが異符号である場合の処理を、 `a - b` を返す前に行う必要がある、ということになります。
53
+
54
+ この `compare(a,b)` を使うことで、ソート対象の配列 `ary` (hoge が与えられる想定) と、 `baseDate`を引数として取り、望ましい順序で並べ替えた配列を返す関数 `sortByBaseDate(ary, baseDate)` を以下のように書けます。
55
+
56
+ ```javascript
68
57
  const sortByBaseDate = (ary, baseDate) =>
69
58
  ary.sort((e1,e2) => compare(baseDate - e1.date, baseDate - e2.date));
70
-
71
59
  ```
72
60
 
73
- 上記のように、 `compare` と `sortByBaseDate` を用意しておくと、 `sortByBaseDate(hoge, 4)` で望む配列が得られます。
61
+ のように、 `compare` と `sortByBaseDate` を用意しておくと、 `sortByBaseDate(hoge, 4)` で望む配列が得られます。
74
62
 
75
63
 
76
64
  **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/fr2snba7/1/](https://jsfiddle.net/jun68ykt/fr2snba7/1/)

18

テキスト修正

2018/09/15 02:37

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -36,12 +36,14 @@
36
36
  ```
37
37
  if ( a が 0 )
38
38
  負の数を返す。
39
+
39
- else if ( b が 0 )
40
+ if ( b が 0 )
40
41
   正の数を返す。
42
+
41
- else if ( a と b は異符号 )
43
+ if ( a と b は異符号 )
42
44
  b が負の数なら、負の数を返し、そうでないなら正の数を返す。
43
- else /* a と b とは同符号 */
45
+
44
- a - b を返す。
46
+ 上記以外であれば、 a - b を返す。
45
47
  ```
46
48
 
47
49
  上記のロジックを言葉で説明すると、 二つの整数 `a` 、 `b` の比較関数 `compare(a, b)` は、通常ではただ単に `a - b` を返せば済むところを、このご質問の要件を満たすためには、 `a`または`b`が 0 である場合の処理と、 `a`と `b`とが異符号である場合の処理を、 `a - b` を返す前に行う必要がある、ということになります。

17

テキスト修正

2018/09/15 02:30

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -34,24 +34,33 @@
34
34
  上記のようなソートを行うための比較関数 `compare(a, b)` は、以下を満たせばよいです。
35
35
 
36
36
  ```
37
- if ( a か b のいずれかが 0 )
37
+ if ( a が 0 )
38
+ 負の数を返す。
38
- a が0ならば負の数を返し、 そうでないなら正の数を返す。
39
+ else if ( b 0 )
40
+  正の数を返す。
39
- else if ( a と b 符号 )
41
+ else if ( a と b は符号 )
42
+ b が負の数なら、負の数を返し、そうでないなら正の数を返す。
43
+ else /* a と b とは同符号 */
40
44
  a - b を返す。
41
- else
42
- b が負の数なら、負の数を返し、そうでないなら正の数を返す。
43
45
  ```
44
46
 
45
- 上記の考え方作成しコード以下です。
47
+ 上記のロジックを言葉説明すると、 二つの整数 `a` 、 `b` の比較関数 `compare(a, b)` は、通常ではだ単に `a - b` を返せば済むところを、このご質問の要件を満たすためには、 `a`または`b` 0 ある場合の処理と、 `a`と `b`とが異符号である場合の処理を、 `a - b` を返前に行う必要がある、ということになります
46
48
 
49
+ 上記の考え方で作成した `compare(a,b)` が以下です。
50
+
47
51
  ```javascript
48
52
  const compare = (a, b) => {
53
+
54
+ // a または b が 0 である場合
55
+ if ( a === 0 ) return -1;
49
- if (a * b === 0)
56
+ if ( b === 0 ) return 1;
57
+
50
- return Math.abs(a) - Math.abs(b);
58
+ // a b が異符号の場合
51
- else if ( a * b > 0)
59
+ if ( a * b < 0 ) return b;
60
+
61
+ // a と b が同符号の場合
52
- return a - b;
62
+ return a - b;
53
- else
63
+
54
- return b;
55
64
  };
56
65
 
57
66
  const sortByBaseDate = (ary, baseDate) =>
@@ -62,7 +71,7 @@
62
71
  上記のように、 `compare` と `sortByBaseDate` を用意しておくと、 `sortByBaseDate(hoge, 4)` で望む配列が得られます。
63
72
 
64
73
 
65
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3h6aesjz/1/](https://jsfiddle.net/jun68ykt/3h6aesjz/1/)
74
+ **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/fr2snba7/1/](https://jsfiddle.net/jun68ykt/fr2snba7/1/)
66
75
 
67
76
   
68
77
   
@@ -82,7 +91,7 @@
82
91
 
83
92
  であった場合のサンプルが以下です。
84
93
 
85
- `hoge` **が、** `date` **でソートされていない例:** [https://jsfiddle.net/jun68ykt/3h6aesjz/2/](https://jsfiddle.net/jun68ykt/3h6aesjz/2/)
94
+ `hoge` **が、** `date` **でソートされていない例:** [https://jsfiddle.net/jun68ykt/fr2snba7/2/](https://jsfiddle.net/jun68ykt/fr2snba7/2/)
86
95
 
87
96
 
88
97
  ## (2) 配列の回転(rotate)を使う

16

テキスト修正

2018/09/15 02:26

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -31,7 +31,7 @@
31
31
  [0, 1, 2, 3, -3, -2, -1];
32
32
  ```
33
33
 
34
- 上記のようなソートを行うための比較関数 `compare(a, b)` は、以下を満たせばよいです。(※上記の配列内には同じ値がないことを考慮して、 `a` と `b` が等しい場合に 0 を返すコードは省略しています。)
34
+ 上記のようなソートを行うための比較関数 `compare(a, b)` は、以下を満たせばよいです。
35
35
 
36
36
  ```
37
37
  if ( a か b のいずれかが 0 )

15

テキスト修正

2018/09/15 01:55

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -22,7 +22,7 @@
22
22
  { date:"1", status:"A" }
23
23
  ];
24
24
  ```
25
- の各要素の `date` プロパティの(文字列を整数に変換した値を引いた差を要素とする配列
25
+ の各要素の `date` プロパティを整数に変換した値を引いた差を要素とする配列
26
26
  ```javascript
27
27
  [-3, -2, -1, 0, 1, 2, 3];
28
28
  ```

14

テキスト修正

2018/09/14 22:59

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
   
68
68
   
69
- なお上記の比較関数によるソートは、 与えられる配列`hoge` が、 `date`でソートされていなくてたとえば以下
69
+ なお上記の比較関数によるソートは、 与えられる配列`hoge` が、 `date`でソートされていなくても望む結果が得られます。たとえば `hoge` が
70
70
 
71
71
  ```javascript
72
72
  const hoge = [
@@ -80,7 +80,7 @@
80
80
  ];
81
81
  ```
82
82
 
83
- のようなものであっても、望む結果が得られます。そのサンプルが以下です。
83
+ であった場合のサンプルが以下です。
84
84
 
85
85
  `hoge` **が、** `date` **でソートされていない例:** [https://jsfiddle.net/jun68ykt/3h6aesjz/2/](https://jsfiddle.net/jun68ykt/3h6aesjz/2/)
86
86
 

13

テキスト修正

2018/09/14 22:55

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -97,7 +97,7 @@
97
97
 
98
98
  [https://stackoverflow.com/a/1985471](https://stackoverflow.com/a/1985471)
99
99
 
100
- の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) を拝借しますと、基準にする dateが 4 の場合は、`hoge` の要素の中で date が "4"である要素を先頭にもってくるために、3回 rotate すればよいので、
100
+ の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) を拝借しますと、`baseDate`が 4 の場合は、`hoge` の要素の中で date が "4"である要素を先頭にもってくるために、3回 rotate すればよいので、
101
101
 
102
102
  ```javascript
103
103
  const rotateByBaseDate = (ary, baseDate) => [...ary].rotate(ary.length - baseDate);

12

テキスト修正

2018/09/14 22:51

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  以下、異なる考え方、方法による2つの方法を回答します。
4
4
 
5
- なお、以下の回答では、並べ替えた結果、先頭にくる要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。ご質問の例:
5
+ なお、以下の回答では、並べ替えた結果、先頭にくる要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。ご質問の例:
6
6
 
7
7
  > たとえば任意の値を4としたとき
8
8
 
9
- では、`baseDate`が 4 ということになります
9
+ では、`baseDate`が 4 ということになります
10
10
 
11
11
  ## (1) [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う。
12
12
 

11

テキスト修正

2018/09/14 22:47

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,8 +2,12 @@
2
2
 
3
3
  以下、異なる考え方、方法による2つの方法を回答します。
4
4
 
5
- なお、以下の回答では、並べ替えた結果、先頭にくる要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。(ご質問の例では、`baseDate`が 4 ということになります)
5
+ なお、以下の回答では、並べ替えた結果、先頭にくる要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。(ご質問の例
6
6
 
7
+ > たとえば任意の値を4としたとき
8
+
9
+ では、`baseDate`が 4 ということになります)
10
+
7
11
  ## (1) [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う。
8
12
 
9
13
  ご質問の並べ替えを [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) で実現しようとする場合、たとえば `baseDate` が `4` であるときは、 `4` から配列`hoge`

10

テキスト修正

2018/09/14 22:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  以下、異なる考え方、方法による2つの方法を回答します。
4
4
 
5
+ なお、以下の回答では、並べ替えた結果、先頭にくる要素の`date` プロパティに相当する整数値を、 `baseDate` という変数名で表します。(ご質問の例では、`baseDate`が 4 ということになります)
6
+
5
7
  ## (1) [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う。
6
8
 
7
- ご質問の並べ替えを [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) で実現しようとする場合、たとえば基準値が `4` であるときは、 `4` から配列`hoge`
9
+ ご質問の並べ替えを [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) で実現しようとする場合、たとえば `baseDate` が `4` であるときは、 `4` から配列`hoge`
8
10
  ```javascript
9
11
  const hoge = [
10
12
  { date:"7", status:"C" },
@@ -27,7 +29,6 @@
27
29
 
28
30
  上記のようなソートを行うための比較関数 `compare(a, b)` は、以下を満たせばよいです。(※上記の配列内には同じ値がないことを考慮して、 `a` と `b` が等しい場合に 0 を返すコードは省略しています。)
29
31
 
30
-
31
32
  ```
32
33
  if ( a か b のいずれかが 0 )
33
34
  a が0ならば負の数を返し、 そうでないなら正の数を返す。
@@ -49,15 +50,15 @@
49
50
  return b;
50
51
  };
51
52
 
52
- const sortByBaseDate = (ary, base) =>
53
+ const sortByBaseDate = (ary, baseDate) =>
53
- ary.sort((e1,e2) => compare(base - e1.date, base - e2.date));
54
+ ary.sort((e1,e2) => compare(baseDate - e1.date, baseDate - e2.date));
54
55
 
55
56
  ```
56
57
 
57
58
  上記のように、 `compare` と `sortByBaseDate` を用意しておくと、 `sortByBaseDate(hoge, 4)` で望む配列が得られます。
58
59
 
59
60
 
60
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/ca396q1e/3/](https://jsfiddle.net/jun68ykt/ca396q1e/3/)
61
+ **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/3h6aesjz/1/](https://jsfiddle.net/jun68ykt/3h6aesjz/1/)
61
62
 
62
63
   
63
64
   
@@ -77,7 +78,7 @@
77
78
 
78
79
  のようなものであっても、望む結果が得られます。そのサンプルが以下です。
79
80
 
80
- `hoge` **が、** `date` **でソートされていない例:** [https://jsfiddle.net/jun68ykt/ca396q1e/4/](https://jsfiddle.net/jun68ykt/ca396q1e/4/)
81
+ `hoge` **が、** `date` **でソートされていない例:** [https://jsfiddle.net/jun68ykt/3h6aesjz/2/](https://jsfiddle.net/jun68ykt/3h6aesjz/2/)
81
82
 
82
83
 
83
84
  ## (2) 配列の回転(rotate)を使う
@@ -95,7 +96,7 @@
95
96
  の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) を拝借しますと、基準にする dateが 4 の場合は、`hoge` の要素の中で、 date が "4"である要素を先頭にもってくるために、3回 rotate すればよいので、
96
97
 
97
98
  ```javascript
98
- const rotateByBaseDate = (ary, base) => [...ary].rotate(ary.length - base);
99
+ const rotateByBaseDate = (ary, baseDate) => [...ary].rotate(ary.length - baseDate);
99
100
  ```
100
101
 
101
102
  を作っておいて、 `rotateByBaseDate(hoge, 4)` とすれば望む配列が得られます。
@@ -105,7 +106,7 @@
105
106
 
106
107
  上記の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) と`rotateByBaseDate` を使って、初めに 基準値 "4" で並べ替え、次に基準値 "5" で並べ替えるサンプルを以下に作成しました。
107
108
 
108
- ** 配列をrotateさせるサンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/7/](https://jsfiddle.net/jun68ykt/tycq3g28/7/)
109
+ ** 配列をrotateさせるサンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/8/](https://jsfiddle.net/jun68ykt/tycq3g28/8/)
109
110
 
110
111
 
111
112
    

9

テキスト修正

2018/09/14 22:44

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
  - stackoverflow.com: [JavaScript Array rotate()](https://stackoverflow.com/questions/1985260/javascript-array-rotate)
90
90
 
91
- 上記質問の回答の中で、ベストアンサーになっている
91
+ これのベストアンサーになっている
92
92
 
93
93
  [https://stackoverflow.com/a/1985471](https://stackoverflow.com/a/1985471)
94
94
 

8

テキスト修正

2018/09/14 21:53

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## (1) [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う。
6
6
 
7
- ご質問の並べ替えを [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) で実現しようとする場合、たとえば基準値が `4` で、`hoge`
7
+ ご質問の並べ替えを [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) で実現しようとする場合、たとえば基準値が `4` であるときは `4` から配列`hoge`
8
8
  ```javascript
9
9
  const hoge = [
10
10
  { date:"7", status:"C" },
@@ -16,8 +16,7 @@
16
16
  { date:"1", status:"A" }
17
17
  ];
18
18
  ```
19
-
20
- であるときは、`4` から各要素の `date` プロパティの(文字列を整数に変換した)値を引いた差を要素とする配列
19
+ 各要素の `date` プロパティの(文字列を整数に変換した)値を引いた差を要素とする配列
21
20
  ```javascript
22
21
  [-3, -2, -1, 0, 1, 2, 3];
23
22
  ```

7

テキスト修正

2018/09/14 21:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -4,9 +4,7 @@
4
4
 
5
5
  ## (1) [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う。
6
6
 
7
- ご質問の並べ替えを [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) で実現し
7
+ ご質問の並べ替えを [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) で実現しようとる場合、たとえば基準値が `4` で、`hoge`が
8
-
9
- 基準値が `4` で、`hoge`が
10
8
  ```javascript
11
9
  const hoge = [
12
10
  { date:"7", status:"C" },
@@ -19,7 +17,7 @@
19
17
  ];
20
18
  ```
21
19
 
22
- である場合、`4` から各要素の `date` プロパティの(文字列を整数に変換した)値を引いた差を要素とする配列
20
+ であるときは、`4` から各要素の `date` プロパティの(文字列を整数に変換した)値を引いた差を要素とする配列
23
21
  ```javascript
24
22
  [-3, -2, -1, 0, 1, 2, 3];
25
23
  ```

6

テキスト修正

2018/09/14 21:42

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  以下、異なる考え方、方法による2つの方法を回答します。
4
4
 
5
- ## (1) sort で実現する
5
+ ## (1) [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う
6
6
 
7
7
  ご質問の並べ替えを [Array.prototype.sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) で実現します。
8
8
 

5

テキスト修正

2018/09/14 21:38

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -57,7 +57,7 @@
57
57
 
58
58
  ```
59
59
 
60
- 上記のように、 `compare` と `sortByBaseDate` を作ると、 `sortByBaseDate(hoge, 4)` で望む配列が得られます。
60
+ 上記のように、 `compare` と `sortByBaseDate` を用意しておくと、 `sortByBaseDate(hoge, 4)` で望む配列が得られます。
61
61
 
62
62
 
63
63
  **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/ca396q1e/3/](https://jsfiddle.net/jun68ykt/ca396q1e/3/)

4

テキスト修正

2018/09/14 21:34

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -106,7 +106,7 @@
106
106
  なお、上記のコードで`[...ary]`としているところを、単に `ary` としてしまうと、 `rotateByBaseDate(hoge, 4)` としたときに `hoge`自体が変更されてしまって、引き続き、たとえば `rotateByBaseDate(hoge, 5)` とすると望む結果にならなくなってしまうので、これを避けるために`[...ary]` として `ary` のコピーに対して [Array.prototype.rotate](https://stackoverflow.com/a/1985471)を使っています。
107
107
 
108
108
 
109
- 上記の `rotateByBaseDate` を使って、初めに 基準値 "4" で並べ替え、次に基準値 "5" で並べ替えるサンプルを以下に作成しました。
109
+ 上記の [Array.prototype.rotate](https://stackoverflow.com/a/1985471) と`rotateByBaseDate` を使って、初めに 基準値 "4" で並べ替え、次に基準値 "5" で並べ替えるサンプルを以下に作成しました。
110
110
 
111
111
  ** 配列をrotateさせるサンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/7/](https://jsfiddle.net/jun68ykt/tycq3g28/7/)
112
112
 

3

テキスト修正

2018/09/14 21:24

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -106,7 +106,7 @@
106
106
  なお、上記のコードで`[...ary]`としているところを、単に `ary` としてしまうと、 `rotateByBaseDate(hoge, 4)` としたときに `hoge`自体が変更されてしまって、引き続き、たとえば `rotateByBaseDate(hoge, 5)` とすると望む結果にならなくなってしまうので、これを避けるために`[...ary]` として `ary` のコピーに対して [Array.prototype.rotate](https://stackoverflow.com/a/1985471)を使っています。
107
107
 
108
108
 
109
- 以下は、上記の `rotateByBaseDate` を使って、初めに 基準値 "4" で並べ替え、次に基準値 "5" で並べ替えるサンプルです
109
+ 上記の `rotateByBaseDate` を使って、初めに 基準値 "4" で並べ替え、次に基準値 "5" で並べ替えるサンプルを以下に作成しました
110
110
 
111
111
  ** 配列をrotateさせるサンプル: ** [https://jsfiddle.net/jun68ykt/tycq3g28/7/](https://jsfiddle.net/jun68ykt/tycq3g28/7/)
112
112
 

2

テキスト修正

2018/09/14 21:23

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- 以下、2つの異なる考え方、方法による回答になります。
3
+ 以下、異なる考え方、方法による2つの方法を回答ます。
4
4
 
5
5
  ## (1) sort で実現する。
6
6
 

1

テキスト修正

2018/09/14 21:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -28,7 +28,7 @@
28
28
  [0, 1, 2, 3, -3, -2, -1];
29
29
  ```
30
30
 
31
- 上記のようなソートを行うための比較関数 `compare(a, b)` は、以下を満たせばよいです。
31
+ 上記のようなソートを行うための比較関数 `compare(a, b)` は、以下を満たせばよいです。(※上記の配列内には同じ値がないことを考慮して、 `a` と `b` が等しい場合に 0 を返すコードは省略しています。)
32
32
 
33
33
 
34
34
  ```