回答編集履歴
6
テキスト修正
test
CHANGED
@@ -132,7 +132,7 @@
|
|
132
132
|
|
133
133
|
|
134
134
|
|
135
|
-
上記であるとすると、先
|
135
|
+
上記であるとすると、先の回答に書いた `makeCompare` を以下のように修正します。
|
136
136
|
|
137
137
|
|
138
138
|
|
5
テキスト修正
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
テキスト修正
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
テキスト修正
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
テキスト修正
test
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
-
|
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
テキスト修正
test
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
|
33
33
|
|
34
34
|
|
35
|
-
まず、ソートキーの配列を受け取って比較関数を返す、以下のような関数を作ります。
|
35
|
+
まず、ソートキーの配列を受け取って比較関数を返す、以下のような高階関数を作ります。
|
36
36
|
|
37
37
|
```javascript
|
38
38
|
|