回答編集履歴
10
テキスト修正
test
CHANGED
@@ -11,10 +11,6 @@
|
|
11
11
|
|
12
12
|
|
13
13
|
```
|
14
|
-
|
15
|
-
$ node -v
|
16
|
-
|
17
|
-
v12.7.0
|
18
14
|
|
19
15
|
$ node
|
20
16
|
|
@@ -38,13 +34,29 @@
|
|
38
34
|
|
39
35
|
- **(2)** sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させる。
|
40
36
|
|
37
|
+
|
41
38
|
|
42
|
-
|
43
|
-
|
39
|
+
|
44
40
|
|
45
41
|
|
46
42
|
|
43
|
+
以下、具体的なコードで回答します。
|
44
|
+
|
45
|
+
配列`list` の元になる、ソート対象の配列は、ご質問に挙げられているコードでは
|
46
|
+
|
47
|
+
```javascript
|
48
|
+
|
49
|
+
var list = testSort([["aaa",10],["bbb",20],["ccc",""],["ddd",30],["eee",40]]);
|
50
|
+
|
51
|
+
```
|
52
|
+
|
53
|
+
```javascript
|
54
|
+
|
55
|
+
var list = testSort([["aaa",100],["bbb",10],["ccc",""],["ddd",30],["eee",40]]);
|
56
|
+
|
57
|
+
```
|
58
|
+
|
47
|
-
|
59
|
+
となっていますが、上記のように各要素である長さ2の配列の2番目の要素が、空文字列以外は正の数であるということを前提にしてよいのであれば、`sort`に与える比較関数は、冒頭の**(1)**と**(2) **を両方使って、以下で事足ります。
|
48
60
|
|
49
61
|
|
50
62
|
|
@@ -58,7 +70,7 @@
|
|
58
70
|
|
59
71
|
```
|
60
72
|
|
61
|
-
|
73
|
+
上記は、アロー関数を使えば以下のようにも書けます。
|
62
74
|
|
63
75
|
```javascript
|
64
76
|
|
@@ -74,7 +86,7 @@
|
|
74
86
|
|
75
87
|
|
76
88
|
|
77
|
-
|
89
|
+
ソート対象の配列において、各要素の配列の2番目の値が0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、 `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加して、以下のようにします。この場合は、冒頭の**(2) **のみを使うということになります。
|
78
90
|
|
79
91
|
|
80
92
|
|
@@ -92,7 +104,7 @@
|
|
92
104
|
|
93
105
|
```
|
94
106
|
|
95
|
-
|
107
|
+
上記は、アロー関数と入れ子の三項演算子を使って、以下のようにも書けます。
|
96
108
|
|
97
109
|
|
98
110
|
|
@@ -106,4 +118,4 @@
|
|
106
118
|
|
107
119
|
|
108
120
|
|
109
|
-
ただし、上記のコードのように三項演算子を入れ子にするのは、([ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary)できるように、)読みにくいコードになりがちなので、業務
|
121
|
+
ただし、上記のコードのように三項演算子を入れ子にするのは、([ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary)できるように、)読みにくいコードになりがちなので、業務では使わないほうがよいかもしれません。
|
9
テキスト修正
test
CHANGED
@@ -36,17 +36,15 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
- **(2)** sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させる
|
39
|
+
- **(2)** sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させる。
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
+
|
43
44
|
|
44
45
|
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は、上記の **(1)**と**(2) **を両方使って、以下で
|
47
|
+
具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は、上記の **(1)**と**(2) **を両方使って、以下で事足りるものになります。
|
50
48
|
|
51
49
|
|
52
50
|
|
8
テキスト修正
test
CHANGED
@@ -76,7 +76,7 @@
|
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
`list` の各要素の配列の2番目の値が 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、
|
79
|
+
`list` の各要素の配列の2番目の値が 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、 `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加して、以下のようにします。この場合は、冒頭の**(2) **のみを使うということになります。
|
80
80
|
|
81
81
|
|
82
82
|
|
7
テキスト修正
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
- (1) 引き算の対象に空文字列があると、`0` として扱われる。(以下、参照)
|
9
|
+
- **(1)** 引き算の対象に空文字列があると、`0` として扱われる。(以下、参照)
|
10
10
|
|
11
11
|
|
12
12
|
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
- (2) sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させるようにしてもよい。
|
39
|
+
- **(2)** sort に与える関数の返す値として、`1`の替わりに正の数、`-1` の替わりに負の数を返させるようにしてもよい。
|
40
40
|
|
41
41
|
|
42
42
|
|
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
|
48
48
|
|
49
|
-
具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は以下でよいかと思います。
|
49
|
+
具体的には、もし、`list` の各要素である配列の2番目の要素の値が、空文字列以外は正の数という前提であれば、比較関数は、上記の **(1)**と**(2) **を両方使って、以下でよいかと思います。
|
50
50
|
|
51
51
|
|
52
52
|
|
@@ -60,7 +60,7 @@
|
|
60
60
|
|
61
61
|
```
|
62
62
|
|
63
|
-
または、アロー関数を使えば
|
63
|
+
または、アロー関数を使えば、以下のようにも書けます。
|
64
64
|
|
65
65
|
```javascript
|
66
66
|
|
@@ -76,7 +76,7 @@
|
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
`list` の各要素の配列の2番目の値が
|
79
|
+
`list` の各要素の配列の2番目の値が 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、以下のように `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加します。この場合は、冒頭の**(2) **のみを使うということになります。
|
80
80
|
|
81
81
|
|
82
82
|
|
6
テキスト修正
test
CHANGED
@@ -94,7 +94,7 @@
|
|
94
94
|
|
95
95
|
```
|
96
96
|
|
97
|
-
または、以下のようにも書けます。
|
97
|
+
または、アロー関数と、入れ子の三項演算子を使って以下のようにも書けます。
|
98
98
|
|
99
99
|
|
100
100
|
|
5
テキスト修正
test
CHANGED
@@ -108,4 +108,4 @@
|
|
108
108
|
|
109
109
|
|
110
110
|
|
111
|
-
ただし、上記のコードのように三項演算子を入れ子にするのは、[ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary)
|
111
|
+
ただし、上記のコードのように三項演算子を入れ子にするのは、([ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary)できるように、)読みにくいコードになりがちなので、業務などで他の人も読むコードを書くときには使わないほうがよいかもしれません。
|
4
テキスト修正
test
CHANGED
@@ -108,4 +108,4 @@
|
|
108
108
|
|
109
109
|
|
110
110
|
|
111
|
-
|
111
|
+
ただし、上記のコードのように三項演算子を入れ子にするのは、[ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary) できるように、読みにくいコードになりがちなので、業務などで他の人も読むコードを書くときには使わないほうがよいかもしれません。
|
3
テキスト修正
test
CHANGED
@@ -96,6 +96,8 @@
|
|
96
96
|
|
97
97
|
または、以下のようにも書けます。
|
98
98
|
|
99
|
+
|
100
|
+
|
99
101
|
```javascript
|
100
102
|
|
101
103
|
(a, b) => a[1] === "" ? 1 : (b[1] === "" ? -1 : b[1] - a[1])
|
@@ -103,3 +105,7 @@
|
|
103
105
|
```
|
104
106
|
|
105
107
|
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012](https://codepen.io/jun68ykt/pen/YzXGoNW?editors=0012)
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
余談ですが、上記のコードのように三項演算子を入れ子にするのは、[ESLintにこれを警告させるように設定](https://eslint.org/docs/rules/no-nested-ternary) できるように、読みにくいコードになりがちなので、業務などで他の人も読むコードを書くときには使わないほうがよいかもしれません。
|
2
テキスト修正
test
CHANGED
@@ -76,7 +76,7 @@
|
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
`list` の各要素の配列の2番目の値が、
|
79
|
+
`list` の各要素の配列の2番目の値が、 0および負の数も含むことがあり、その場合も空文字列を含む配列は最後になるようにソートしたいのであれば、以下のように `b[1] - a[1]` を返す前に、いずれかが空文字列だった場合の `if` 文を追加します。
|
80
80
|
|
81
81
|
|
82
82
|
|
1
テキスト修正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
ご質問に挙げられているコードを改善する際には、以下の (1)、(2) の2点
|
5
|
+
ご質問に挙げられているコードを改善する際には、以下の (1)、(2) の2点を使うとよいかと思います。
|
6
6
|
|
7
7
|
|
8
8
|
|
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
-
|
43
|
+
|
44
44
|
|
45
45
|
|
46
46
|
|