回答編集履歴
6
テキスト修正
answer
CHANGED
@@ -65,7 +65,7 @@
|
|
65
65
|
・ max1 = max2 ならば、 obj1 と obj2 の前後は変更されない
|
66
66
|
・ max1 < max2 ならば、 obj1 は obj2 よりも後
|
67
67
|
|
68
|
-
上記であるとすると、先
|
68
|
+
上記であるとすると、先の回答に書いた `makeCompare` を以下のように修正します。
|
69
69
|
|
70
70
|
```javascript
|
71
71
|
const makeCompare = (keys) => (
|
5
テキスト修正
answer
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
> 「extKeys をまぜて一気に」という感じ
|
56
56
|
|
57
|
-
とのご返答がありましたので、これを、コードに落とせるレベルの詳細としては、以下と解釈しました。
|
57
|
+
とのご返答がありましたので、これを、コードに落とせるレベルの詳細としては、以下と解釈しました。(以下の(4) だけでソート要件は把握できるので、先の (1)(2)(3) の3つに変わるものです。)
|
58
58
|
|
59
59
|
(4) array の2つの要素 obj1 , obj2 について、 以下のように比較する。
|
60
60
|
|
4
テキスト修正
answer
CHANGED
@@ -45,4 +45,37 @@
|
|
45
45
|
|
46
46
|
|
47
47
|
冒頭に書いた、ご質問の要件の解釈 (1),(2),(3) が間違っていましたら、コメントからご指摘頂ければと思います。
|
48
|
-
以上、参考になれば幸いです。
|
48
|
+
以上、参考になれば幸いです。
|
49
|
+
|
50
|
+
|
51
|
+
### 追記
|
52
|
+
|
53
|
+
質問への追記・修正の依頼のほうに
|
54
|
+
|
55
|
+
> 「extKeys をまぜて一気に」という感じ
|
56
|
+
|
57
|
+
とのご返答がありましたので、これを、コードに落とせるレベルの詳細としては、以下と解釈しました。
|
58
|
+
|
59
|
+
(4) array の2つの要素 obj1 , obj2 について、 以下のように比較する。
|
60
|
+
|
61
|
+
- `obj1` のプロパティのうち、配列 `extKeys` に含まれるものの最大値を `max1` とする。
|
62
|
+
- `obj2` のプロパティのうち、配列 `extKeys` に含まれるものの最大値を `max2` とする。
|
63
|
+
- 上記の max1 と max2 を比較して、ソート後の obj1 と obj2 の順序を以下とする。
|
64
|
+
・ max1 > max2 ならば、 obj1 は obj2 よりも前
|
65
|
+
・ max1 = max2 ならば、 obj1 と obj2 の前後は変更されない
|
66
|
+
・ max1 < max2 ならば、 obj1 は obj2 よりも後
|
67
|
+
|
68
|
+
上記であるとすると、先に回答に書いた `makeCompare` を以下のように修正します。
|
69
|
+
|
70
|
+
```javascript
|
71
|
+
const makeCompare = (keys) => (
|
72
|
+
(obj1, obj2) => {
|
73
|
+
const max1 = Math.max(...keys.map(k => +obj1[k]));
|
74
|
+
const max2 = Math.max(...keys.map(k => +obj2[k]));
|
75
|
+
return max2 - max1;
|
76
|
+
}
|
77
|
+
);
|
78
|
+
```
|
79
|
+
上記のコードも動作確認用に以下のjsFiddleに上げました。
|
80
|
+
|
81
|
+
- **動作確認用:** [https://jsfiddle.net/jun68ykt/8jx6zemv/2/](https://jsfiddle.net/jun68ykt/8jx6zemv/2/)
|
3
テキスト修正
answer
CHANGED
@@ -12,6 +12,7 @@
|
|
12
12
|
|
13
13
|
(3) extKeys が [ 'x_num' ] のときは、 x_num の値の降順でソートし、 x_num の値が同じ要素については、順序を変えないようにする。
|
14
14
|
```
|
15
|
+
以下の回答は、上記の(1)(2)(3)が、ご質問の要件として齟齬がないことを前提としたものですので、要件の解釈が間違っていましたら、コメントからご指摘ください。
|
15
16
|
|
16
17
|
ソートキーが `[ 'x_num', 'y_num' ] ` だったり`[ 'x_num' ] ` だったりと変わり得る状況で、上記の(1)(2)(3) を満たすようなソートを実行するコードは、たとえば以下のようになるかと思います。(※了解事項とは思いますが、空文字列は `0` として扱われます。)
|
17
18
|
|
2
テキスト修正
answer
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
(3) extKeys が [ 'x_num' ] のときは、 x_num の値の降順でソートし、 x_num の値が同じ要素については、順序を変えないようにする。
|
14
14
|
```
|
15
15
|
|
16
|
-
|
16
|
+
ソートキーが `[ 'x_num', 'y_num' ] ` だったり`[ 'x_num' ] ` だったりと変わり得る状況で、上記の(1)(2)(3) を満たすようなソートを実行するコードは、たとえば以下のようになるかと思います。(※了解事項とは思いますが、空文字列は `0` として扱われます。)
|
17
17
|
|
18
18
|
まず、ソートキーの配列を受け取って比較関数を返す、以下のような高階関数を作ります。
|
19
19
|
```javascript
|
@@ -43,5 +43,5 @@
|
|
43
43
|
- **動作確認用: ** [https://jsfiddle.net/jun68ykt/smy7rxLq/2/](https://jsfiddle.net/jun68ykt/smy7rxLq/2/)
|
44
44
|
|
45
45
|
|
46
|
-
冒頭に書いた、ご質問の要件の解釈が間違っていましたら、コメント頂ければと思います。
|
46
|
+
冒頭に書いた、ご質問の要件の解釈 (1),(2),(3) が間違っていましたら、コメントからご指摘頂ければと思います。
|
47
47
|
以上、参考になれば幸いです。
|
1
テキスト修正
answer
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
もし上記の(1)(2)(3) を満たすようなソートを、ソートキーを変えて実行したい、ということであれば、たとえば以下のようになるかと思います。(※了解事項とは思いますが、値が空文字列のものは `0` として扱われます。)
|
17
17
|
|
18
|
-
まず、ソートキーの配列を受け取って比較関数を返す、以下のような関数を作ります。
|
18
|
+
まず、ソートキーの配列を受け取って比較関数を返す、以下のような高階関数を作ります。
|
19
19
|
```javascript
|
20
20
|
const makeCompare = (keys) => (
|
21
21
|
(obj1, obj2) => {
|