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

回答編集履歴

10

テキスト修正

2020/02/22 02:25

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,8 +5,6 @@
5
5
  - **(1)** 引き算の対象に空文字列があると、`0` として扱われる。(以下、参照)
6
6
 
7
7
  ```
8
- $ node -v
9
- v12.7.0
10
8
  $ node
11
9
  Welcome to Node.js v12.7.0.
12
10
  Type ".help" for more information.
@@ -18,17 +16,25 @@
18
16
  ```
19
17
 
20
18
  - **(2)** sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させる。
21
-
22
19
    
20
+  
23
21
 
22
+ 以下、具体的なコードで回答します。
23
+ 配列`list` の元になる、ソート対象の配列は、ご質問に挙げられているコードでは
24
+ ```javascript
25
+ var list = testSort([["aaa",10],["bbb",20],["ccc",""],["ddd",30],["eee",40]]);
26
+ ```
27
+ ```javascript
28
+ var list = testSort([["aaa",100],["bbb",10],["ccc",""],["ddd",30],["eee",40]]);
29
+ ```
24
- 具体的にはもし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は、上記 **(1)**と**(2) **を両方使って、以下で事足りるものになります。
30
+ となっていますが上記ように各要素である長さ2の配列の2番目の要素が、空文字列以外は正の数であるということを前提にしてよいのであれば、`sort`に与える比較関数は、冒頭の**(1)**と**(2) **を両方使って、以下で事足ります。
25
31
 
26
32
  ```javascript
27
33
  function(a, b){
28
34
  return b[1] - a[1];
29
35
  }
30
36
  ```
31
- または、アロー関数を使えば以下のようにも書けます。
37
+ 上記は、アロー関数を使えば以下のようにも書けます。
32
38
  ```javascript
33
39
  (a, b) => b[1] - a[1]
34
40
  ```
@@ -36,7 +42,7 @@
36
42
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/OJVReym?editors=0012](https://codepen.io/jun68ykt/pen/OJVReym?editors=0012)
37
43
 
38
44
 
39
- `list` の各要素の配列の2番目の値が 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、 `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加して、以下のようにします。この場合は、冒頭の**(2) **のみを使うということになります。
45
+ ソート対象配列において、各要素の配列の2番目の値が0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、 `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加して、以下のようにします。この場合は、冒頭の**(2) **のみを使うということになります。
40
46
 
41
47
  ```javascript
42
48
  function(a, b){
@@ -45,11 +51,11 @@
45
51
  return b[1] - a[1];
46
52
  }
47
53
  ```
48
- または、アロー関数と入れ子の三項演算子を使って以下のようにも書けます。
54
+ 上記は、アロー関数と入れ子の三項演算子を使って以下のようにも書けます。
49
55
 
50
56
  ```javascript
51
57
  (a, b) => a[1] === "" ? 1 : (b[1] === "" ? -1 : b[1] - a[1])
52
58
  ```
53
59
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012](https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012)
54
60
 
55
- ただし、上記のコードのように三項演算子を入れ子にするのは、([ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary)できるように、)読みにくいコードになりがちなので、業務など他の人も読むコードを書くときには使わないほうがよいかもしれません。
61
+ ただし、上記のコードのように三項演算子を入れ子にするのは、([ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary)できるように、)読みにくいコードになりがちなので、業務では使わないほうがよいかもしれません。

9

テキスト修正

2020/02/22 02:25

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -17,13 +17,12 @@
17
17
  >
18
18
  ```
19
19
 
20
- - **(2)** sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させるようにしてもよい
20
+ - **(2)** sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させる。
21
21
 
22
+   
22
23
 
24
+ 具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は、上記の **(1)**と**(2) **を両方使って、以下で事足りるものになります。
23
25
 
24
-
25
- 具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は、上記の **(1)**と**(2) **を両方使って、以下でよいかと思います。
26
-
27
26
  ```javascript
28
27
  function(a, b){
29
28
  return b[1] - a[1];

8

テキスト修正

2020/02/22 01:44

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -37,7 +37,7 @@
37
37
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/OJVReym?editors=0012](https://codepen.io/jun68ykt/pen/OJVReym?editors=0012)
38
38
 
39
39
 
40
- `list` の各要素の配列の2番目の値が 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、以下のように `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加します。この場合は、冒頭の**(2) **のみを使うということになります。
40
+ `list` の各要素の配列の2番目の値が 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、 `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加して、以下のようにします。この場合は、冒頭の**(2) **のみを使うということになります。
41
41
 
42
42
  ```javascript
43
43
  function(a, b){

7

テキスト修正

2020/02/21 14:30

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ご質問に挙げられているコードを改善する際には、以下の (1)、(2) の2点を使うとよいかと思います。
4
4
 
5
- - (1) 引き算の対象に空文字列があると、`0` として扱われる。(以下、参照)
5
+ - **(1)** 引き算の対象に空文字列があると、`0` として扱われる。(以下、参照)
6
6
 
7
7
  ```
8
8
  $ node -v
@@ -17,19 +17,19 @@
17
17
  >
18
18
  ```
19
19
 
20
- - (2) sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させるようにしてもよい。
20
+ - **(2)** sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させるようにしてもよい。
21
21
 
22
22
 
23
23
 
24
24
 
25
- 具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は以下でよいかと思います。
25
+ 具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は、上記の **(1)**と**(2) **を両方使って、以下でよいかと思います。
26
26
 
27
27
  ```javascript
28
28
  function(a, b){
29
29
  return b[1] - a[1];
30
30
  }
31
31
  ```
32
- または、アロー関数を使えば
32
+ または、アロー関数を使えば、以下のようにも書けます。
33
33
  ```javascript
34
34
  (a, b) => b[1] - a[1]
35
35
  ```
@@ -37,7 +37,7 @@
37
37
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/OJVReym?editors=0012](https://codepen.io/jun68ykt/pen/OJVReym?editors=0012)
38
38
 
39
39
 
40
- `list` の各要素の配列の2番目の値が 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、以下のように `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加します。
40
+ `list` の各要素の配列の2番目の値が 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、以下のように `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加します。この場合は、冒頭の**(2) **のみを使うということになります。
41
41
 
42
42
  ```javascript
43
43
  function(a, b){

6

テキスト修正

2020/02/21 14:01

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -46,7 +46,7 @@
46
46
  return b[1] - a[1];
47
47
  }
48
48
  ```
49
- または、以下のようにも書けます。
49
+ または、アロー関数と、入れ子の三項演算子を使って以下のようにも書けます。
50
50
 
51
51
  ```javascript
52
52
  (a, b) => a[1] === "" ? 1 : (b[1] === "" ? -1 : b[1] - a[1])

5

テキスト修正

2020/02/21 06:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -53,4 +53,4 @@
53
53
  ```
54
54
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012](https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012)
55
55
 
56
- ただし、上記のコードのように三項演算子を入れ子にするのは、[ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary) できるように、読みにくいコードになりがちなので、業務などで他の人も読むコードを書くときには使わないほうがよいかもしれません。
56
+ ただし、上記のコードのように三項演算子を入れ子にするのは、([ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary)できるように、)読みにくいコードになりがちなので、業務などで他の人も読むコードを書くときには使わないほうがよいかもしれません。

4

テキスト修正

2020/02/21 04:21

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -53,4 +53,4 @@
53
53
  ```
54
54
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012](https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012)
55
55
 
56
- 余談ですが、上記のコードのように三項演算子を入れ子にするのは、[ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary) できるように、読みにくいコードになりがちなので、業務などで他の人も読むコードを書くときには使わないほうがよいかもしれません。
56
+ ただし、上記のコードのように三項演算子を入れ子にするのは、[ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary) できるように、読みにくいコードになりがちなので、業務などで他の人も読むコードを書くときには使わないほうがよいかもしれません。

3

テキスト修正

2020/02/21 03:16

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -47,7 +47,10 @@
47
47
  }
48
48
  ```
49
49
  または、以下のようにも書けます。
50
+
50
51
  ```javascript
51
52
  (a, b) => a[1] === "" ? 1 : (b[1] === "" ? -1 : b[1] - a[1])
52
53
  ```
53
- - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012](https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012)
54
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012](https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012)
55
+
56
+ 余談ですが、上記のコードのように三項演算子を入れ子にするのは、[ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary) できるように、読みにくいコードになりがちなので、業務などで他の人も読むコードを書くときには使わないほうがよいかもしれません。

2

テキスト修正

2020/02/21 03:13

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -37,7 +37,7 @@
37
37
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/OJVReym?editors=0012](https://codepen.io/jun68ykt/pen/OJVReym?editors=0012)
38
38
 
39
39
 
40
- `list` の各要素の配列の2番目の値が、 `0`および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、以下のように `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加します。
40
+ `list` の各要素の配列の2番目の値が、 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、以下のように `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加します。
41
41
 
42
42
  ```javascript
43
43
  function(a, b){

1

テキスト修正

2020/02/21 02:53

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは
2
2
 
3
- ご質問に挙げられているコードを改善する際には、以下の (1)、(2) の2点
3
+ ご質問に挙げられているコードを改善する際には、以下の (1)、(2) の2点を使うとよいかと思います。
4
4
 
5
5
  - (1) 引き算の対象に空文字列があると、`0` として扱われる。(以下、参照)
6
6
 
@@ -19,9 +19,9 @@
19
19
 
20
20
  - (2) sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させるようにしてもよい。
21
21
 
22
- を用いるとよいかと思います。
23
22
 
24
23
 
24
+
25
25
  具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は以下でよいかと思います。
26
26
 
27
27
  ```javascript