回答編集履歴

6

テキスト修正

2019/08/11 13:10

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -132,7 +132,7 @@
132
132
 
133
133
 
134
134
 
135
- 上記であるとすると、先回答に書いた `makeCompare` を以下のように修正します。
135
+ 上記であるとすると、先回答に書いた `makeCompare` を以下のように修正します。
136
136
 
137
137
 
138
138
 

5

テキスト修正

2019/08/11 13:10

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- とのご返答がありましたので、これを、コードに落とせるレベルの詳細としては、以下と解釈しました。
113
+ とのご返答がありましたので、これを、コードに落とせるレベルの詳細としては、以下と解釈しました。(以下の(4) だけでソート要件は把握できるので、先の (1)(2)(3) の3つに変わるものです。)
114
114
 
115
115
 
116
116
 

4

テキスト修正

2019/08/11 12:44

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -93,3 +93,69 @@
93
93
  冒頭に書いた、ご質問の要件の解釈 (1),(2),(3) が間違っていましたら、コメントからご指摘頂ければと思います。
94
94
 
95
95
  以上、参考になれば幸いです。
96
+
97
+
98
+
99
+
100
+
101
+ ### 追記
102
+
103
+
104
+
105
+ 質問への追記・修正の依頼のほうに
106
+
107
+
108
+
109
+ > 「extKeys をまぜて一気に」という感じ
110
+
111
+
112
+
113
+ とのご返答がありましたので、これを、コードに落とせるレベルの詳細としては、以下と解釈しました。
114
+
115
+
116
+
117
+ (4) array の2つの要素 obj1 , obj2 について、 以下のように比較する。
118
+
119
+
120
+
121
+ - `obj1` のプロパティのうち、配列 `extKeys` に含まれるものの最大値を `max1` とする。
122
+
123
+ - `obj2` のプロパティのうち、配列 `extKeys` に含まれるものの最大値を `max2` とする。
124
+
125
+ - 上記の max1 と max2 を比較して、ソート後の obj1 と obj2 の順序を以下とする。
126
+
127
+   ・ max1 > max2 ならば、 obj1 は obj2 よりも前
128
+
129
+   ・ max1 = max2 ならば、 obj1 と obj2 の前後は変更されない
130
+
131
+   ・ max1 < max2 ならば、 obj1 は obj2 よりも後
132
+
133
+
134
+
135
+ 上記であるとすると、先に回答に書いた `makeCompare` を以下のように修正します。
136
+
137
+
138
+
139
+ ```javascript
140
+
141
+ const makeCompare = (keys) => (
142
+
143
+ (obj1, obj2) => {
144
+
145
+ const max1 = Math.max(...keys.map(k => +obj1[k]));
146
+
147
+ const max2 = Math.max(...keys.map(k => +obj2[k]));
148
+
149
+ return max2 - max1;
150
+
151
+ }
152
+
153
+ );
154
+
155
+ ```
156
+
157
+ 上記のコードも動作確認用に以下のjsFiddleに上げました。
158
+
159
+
160
+
161
+ - **動作確認用:** [https://jsfiddle.net/jun68ykt/8jx6zemv/2/](https://jsfiddle.net/jun68ykt/8jx6zemv/2/)

3

テキスト修正

2019/08/11 12:13

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -25,6 +25,8 @@
25
25
  (3) extKeys が [ 'x_num' ] のときは、 x_num の値の降順でソートし、 x_num の値が同じ要素については、順序を変えないようにする。
26
26
 
27
27
  ```
28
+
29
+ 以下の回答は、上記の(1)(2)(3)が、ご質問の要件として齟齬がないことを前提としたものですので、要件の解釈が間違っていましたら、コメントからご指摘ください。
28
30
 
29
31
 
30
32
 

2

テキスト修正

2019/08/11 11:11

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
 
30
30
 
31
- もし上記の(1)(2)(3) を満たすようなソートを、ソートキーを変えて実行したいということであれば、たとえば以下のようになるかと思います。(※了解事項とは思いますが、値が空文字列のものは `0` として扱われます。)
31
+ ソートキーが `[ 'x_num', 'y_num' ] ` だったり`[ 'x_num' ] ` だったりと変わり得る状況で、上記の(1)(2)(3) を満たすようなソートを実行するコードは、たとえば以下のようになるかと思います。(※了解事項とは思いますが、空文字列は `0` として扱われます。)
32
32
 
33
33
 
34
34
 
@@ -88,6 +88,6 @@
88
88
 
89
89
 
90
90
 
91
- 冒頭に書いた、ご質問の要件の解釈が間違っていましたら、コメント頂ければと思います。
91
+ 冒頭に書いた、ご質問の要件の解釈 (1),(2),(3) が間違っていましたら、コメントからご指摘頂ければと思います。
92
92
 
93
93
  以上、参考になれば幸いです。

1

テキスト修正

2019/08/11 11:00

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- まず、ソートキーの配列を受け取って比較関数を返す、以下のような関数を作ります。
35
+ まず、ソートキーの配列を受け取って比較関数を返す、以下のような高階関数を作ります。
36
36
 
37
37
  ```javascript
38
38