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

回答編集履歴

8

テキスト追加

2018/07/13 01:35

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  **(1)** `x.push(e)` は、`e`が追加された後の`x`の長さを返すので、`x.push(e)` の返す値は常に1以上の整数であり、1以上の整数を論理値として評価すると `true`になります。これを [some](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/some) メソッドから `true` を返させるために使っています。
29
29
 
30
- **(2)** `id` と `name`等しいかを検証する前に、念のため先頭に `x` が空の配列ではない検証を追加して、
30
+ **(2)** `x[0]` と`e` との比較で、プロパティ `id`、`name`ともに等しいかを検証する前に、念のため先頭に `x` が空の配列ではない検証を追加して、
31
31
 
32
32
  `x.length > 0 && x[0].id == e.id && ・・・`
33
33
 

7

テキスト追加

2018/07/13 01:35

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  について、以下の2点を補足します。
27
27
 
28
- **(1)** `x.push(e)` は、`e`が追加された後の`x`の長さを返すので、`x.push(e)` の返す値は常に1以上の整数であり、1以上の整数を論理値として評価すると `true`になります。これを `some`メソッドから `true` を返させるために使っています。
28
+ **(1)** `x.push(e)` は、`e`が追加された後の`x`の長さを返すので、`x.push(e)` の返す値は常に1以上の整数であり、1以上の整数を論理値として評価すると `true`になります。これを [some](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/some) メソッドから `true` を返させるために使っています。
29
29
 
30
30
  **(2)** `id` と `name` が等しいかを検証する前に、念のため先頭に `x` が空の配列ではない検証を追加して、
31
31
 

6

テキスト追加

2018/07/13 01:08

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -19,13 +19,13 @@
19
19
  ---
20
20
  **補足**
21
21
 
22
- 上記のコードに出てくる論理積
22
+ 上記のコード以下の行
23
23
 
24
- `x[0].id == e.id && x[0].name == e.name && x.push(e)`
24
+ `a.some(x => x[0].id == e.id && x[0].name == e.name && x.push(e)) || a.push([e]); `
25
25
 
26
26
  について、以下の2点を補足します。
27
27
 
28
- **(1)** `x.push(e)` は、`e`が追加された後の`x`の長さを返すので、`x.push(e)` の返す値は常に1以上の整数であり、1以上の整数を論理値として評価すると`true`である利用しています。
28
+ **(1)** `x.push(e)` は、`e`が追加された後の`x`の長さを返すので、`x.push(e)` の返す値は常に1以上の整数であり、1以上の整数を論理値として評価すると `true`になります。 `some`メソッドから `true` を返させるために使っています。
29
29
 
30
30
  **(2)** `id` と `name` が等しいかを検証する前に、念のため先頭に `x` が空の配列ではない検証を追加して、
31
31
 

5

テキスト修正

2018/07/13 01:05

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -17,22 +17,19 @@
17
17
  参考になれば幸いです。
18
18
 
19
19
  ---
20
- **補足1**
20
+ **補足**
21
21
 
22
- `a.some(x => x[0].id == e.id && x[0].name == e.name && x.push(e))`
22
+ 上記のコードに出てくる、論理積
23
23
 
24
- の部分については、 `x.push(e)` は、`e`が追加された後の`x`の長さを返すので、
24
+ `x[0].id == e.id && x[0].name == e.name && x.push(e)`
25
- `x.push(e)` の返す値は常に 1以上の整数であり、1以上の整数を
26
- 論理値として評価すると、`true`であることを利用しています。
27
25
 
28
- **補足2**
26
+ について、以下の2点を補足します。
29
27
 
30
- `x => x[0].id == e.id && ・・・`
28
+ **(1)** `x.push(e)` は、`e`が追加された後の`x`の長さを返すので、`x.push(e)` の返す値は常に1以上の整数であり、1以上の整数を論理値として評価すると、`true`であることを利用しています。
31
29
 
32
- と書いているところで、 `id` と `name` が等しいかを検証する前に、
30
+ **(2)** `id` と `name` が等しいかを検証する前に、念のため先頭に `x` が空の配列ではない検証を追加して、
33
- 念のため `x` が空の配列ではない検証を追加して、
34
31
 
35
- `x => x.length > 0 && x[0].id == e.id && ・・・`
32
+ `x.length > 0 && x[0].id == e.id && ・・・`
36
33
 
37
34
  と**しなくてもよい** 理由は、`a` に要素が追加されるのは、
38
35
 

4

ソース修正

2018/07/12 23:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  以下を考えました。
5
5
 
6
6
  ```javascript
7
- const array_3 = array_1.reduce((a, e) => {
7
+ var array_3 = array_1.reduce(function(a, e) {
8
8
  a.some(x => x[0].id == e.id && x[0].name == e.name && x.push(e)) || a.push([e]);
9
9
  return a;
10
10
  }, []);
@@ -12,7 +12,7 @@
12
12
 
13
13
  以下にて、動作確認しています。
14
14
 
15
- [https://jsfiddle.net/jun68ykt/Lfy3odqu/40/](https://jsfiddle.net/jun68ykt/Lfy3odqu/40/)
15
+ [https://jsfiddle.net/jun68ykt/Lfy3odqu/42/](https://jsfiddle.net/jun68ykt/Lfy3odqu/42/)
16
16
 
17
17
  参考になれば幸いです。
18
18
 

3

テキスト修正

2018/07/12 23:17

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -17,10 +17,16 @@
17
17
  参考になれば幸いです。
18
18
 
19
19
  ---
20
- **補足**
20
+ **補足1**
21
21
 
22
- 上記のコードで、
22
+ `a.some(x => x[0].id == e.id && x[0].name == e.name && x.push(e))`
23
23
 
24
+ の部分については、 `x.push(e)` は、`e`が追加された後の`x`の長さを返すので、
25
+ `x.push(e)` の返す値は常に 1以上の整数であり、1以上の整数を
26
+ 論理値として評価すると、`true`であることを利用しています。
27
+
28
+ **補足2**
29
+
24
30
  `x => x[0].id == e.id && ・・・`
25
31
 
26
32
  と書いているところで、 `id` と `name` が等しいかを検証する前に、

2

テキスト修正

2018/07/12 21:56

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -14,4 +14,23 @@
14
14
 
15
15
  [https://jsfiddle.net/jun68ykt/Lfy3odqu/40/](https://jsfiddle.net/jun68ykt/Lfy3odqu/40/)
16
16
 
17
- 参考になれば幸いです。
17
+ 参考になれば幸いです。
18
+
19
+ ---
20
+ **補足**
21
+
22
+ 上記のコードで、
23
+
24
+ `x => x[0].id == e.id && ・・・`
25
+
26
+ と書いているところで、 `id` と `name` が等しいかを検証する前に、
27
+ 念のため `x` が空の配列ではない検証を追加して、
28
+
29
+ `x => x.length > 0 && x[0].id == e.id && ・・・`
30
+
31
+ と**しなくてもよい** 理由は、`a` に要素が追加されるのは、
32
+
33
+ `a.push([e])`
34
+
35
+ のときしかないので、`a` の要素である配列 `x` は空ではなく、
36
+ 少なくとも1個の要素を持つことが分かっているからです。

1

テキスト修正

2018/07/12 21:47

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,13 +5,13 @@
5
5
 
6
6
  ```javascript
7
7
  const array_3 = array_1.reduce((a, e) => {
8
- a.some(x => x.length > 0 && x[0].id == e.id && x[0].name == e.name && x.push(e)) || a.push([e]);
8
+ a.some(x => x[0].id == e.id && x[0].name == e.name && x.push(e)) || a.push([e]);
9
9
  return a;
10
10
  }, []);
11
11
  ```
12
12
 
13
13
  以下にて、動作確認しています。
14
14
 
15
- [https://jsfiddle.net/jun68ykt/Lfy3odqu/38/](https://jsfiddle.net/jun68ykt/Lfy3odqu/38/)
15
+ [https://jsfiddle.net/jun68ykt/Lfy3odqu/40/](https://jsfiddle.net/jun68ykt/Lfy3odqu/40/)
16
16
 
17
17
  参考になれば幸いです。