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

回答編集履歴

6

テキスト修正

2019/08/11 13:10

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -65,7 +65,7 @@
65
65
    ・ max1 = max2 ならば、 obj1 と obj2 の前後は変更されない
66
66
    ・ max1 < max2 ならば、 obj1 は obj2 よりも後
67
67
 
68
- 上記であるとすると、先回答に書いた `makeCompare` を以下のように修正します。
68
+ 上記であるとすると、先回答に書いた `makeCompare` を以下のように修正します。
69
69
 
70
70
  ```javascript
71
71
  const makeCompare = (keys) => (

5

テキスト修正

2019/08/11 13:10

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/11 12:44

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/11 12:13

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/11 11:11

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -13,7 +13,7 @@
13
13
  (3) extKeys が [ 'x_num' ] のときは、 x_num の値の降順でソートし、 x_num の値が同じ要素については、順序を変えないようにする。
14
14
  ```
15
15
 
16
- もし上記の(1)(2)(3) を満たすようなソートを、ソートキーを変えて実行したいということであれば、たとえば以下のようになるかと思います。(※了解事項とは思いますが、値が空文字列のものは `0` として扱われます。)
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

テキスト修正

2019/08/11 11:00

投稿

jun68ykt
jun68ykt

スコア9058

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) => {