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

回答編集履歴

18

テキスト修正

2018/06/02 22:50

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -74,7 +74,7 @@
74
74
  **補足3**
75
75
 
76
76
  「追加された要素の配列と、削除された要素の配列を同時に作る」というのが与件ですが、
77
- 私見としましては、より**”同時に”** のあるコードは、以下のようなものになります。
77
+ 私見としましては、より**”同時に”** (?)のあるコードは、以下のようなものになります。
78
78
 
79
79
 
80
80
  ```javascript

17

テキスト修正

2018/06/02 22:50

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -68,4 +68,31 @@
68
68
  > 理想は同時に抽出する方法ですが、それは難しいのではないかと思っているいたりするので、よりスマートに別々に抽出する方法がありましたら、そちらだけでもご回答いただけると幸いです。
69
69
 
70
70
  とあるので、上記の方法、すなわち、別々に抽出する方法のリファクタ案のひとつとして
71
- お考え頂ければと思います。
71
+ お考え頂ければと思います。
72
+
73
+ ---
74
+ **補足3**
75
+
76
+ 「追加された要素の配列と、削除された要素の配列を同時に作る」というのが与件ですが、
77
+ 私見としましては、より**”同時に”** 感のあるコードは、以下のようなものになります。
78
+
79
+
80
+ ```javascript
81
+ const _ = require('lodash');
82
+
83
+ const diff = (x, y) => {
84
+ const promises =
85
+ [[y, x], [x, y]].map(e =>
86
+ new Promise(resolve => {
87
+ setTimeout(() => { resolve(_.difference(...e)); }, 0);
88
+ })
89
+ );
90
+ return Promise.all(promises);
91
+ };
92
+
93
+ const a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
94
+
95
+ const b = a.map(e => 2 * e);
96
+
97
+ diff(a, b).then(values => { console.log(values); }); // => [ [ 12, 14, 16, 18, 20 ], [ 1, 3, 5, 7, 9 ] ]
98
+ ```

16

テキスト修正

2018/06/02 14:13

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -53,4 +53,19 @@
53
53
 
54
54
  この回答のやり方で実装したサンプルコードを、以下のURLに上げておきました。
55
55
 
56
- [https://jsfiddle.net/jun68ykt/pLuzg0u4/2/](https://jsfiddle.net/jun68ykt/pLuzg0u4/2/)
56
+ [https://jsfiddle.net/jun68ykt/pLuzg0u4/2/](https://jsfiddle.net/jun68ykt/pLuzg0u4/2/)
57
+
58
+ ---
59
+ **補足2**
60
+
61
+ 質問者様のイメージされる、
62
+
63
+ > 同時に
64
+
65
+ の趣旨からすると、私の回答では「同時に抽出することになっていない」というご評価でしたら、
66
+ ご質問に
67
+
68
+ > 理想は同時に抽出する方法ですが、それは難しいのではないかと思っているいたりするので、よりスマートに別々に抽出する方法がありましたら、そちらだけでもご回答いただけると幸いです。
69
+
70
+ とあるので、上記の方法、すなわち、別々に抽出する方法のリファクタ案のひとつとして
71
+ お考え頂ければと思います。

15

テキスト修正

2018/05/27 23:02

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -17,13 +17,13 @@
17
17
 
18
18
  **[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] **
19
19
 
20
- という配列として返す関数になっており、これがご質問にある、
20
+ という配列の配列として返す関数になっており、これがご質問にある、
21
21
 
22
22
  > 同時に抽出する
23
23
 
24
- という働きをしてくれるものになっています。
24
+ という働きをしてくれるものになっているかと思います。
25
- (※ "同時に" という意味を、「一回の関数呼び出しで、追加分と削除分の両方が得られる」という
25
+ (※ 「一回の関数呼び出しで、追加分と削除分の両方が得られる」ということをもって、
26
- 意味考えれば、ですが。)
26
+ 質問者様にっての、"同時に" といってよいとすれば、ですが。)
27
27
 
28
28
  たとえば、
29
29
 

14

テキスト修正

2018/05/27 21:29

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -14,13 +14,19 @@
14
14
  ```
15
15
 
16
16
  上記の関数 `diff(ar1, ar2)` は、配列 ar1, ar2の差分を、
17
+
17
18
  **[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] **
19
+
18
20
  という配列として返す関数になっており、これがご質問にある、
19
21
 
20
22
  > 同時に抽出する
21
23
 
22
- という働きをしてくれるものになっています。たとえば、
24
+ という働きをしてくれるものになっています。
25
+ (※ "同時に" という意味を、「一回の関数呼び出しで、追加分と削除分の両方が得られる」という
26
+ 意味と考えれば、ですが。)
23
27
 
28
+ たとえば、
29
+
24
30
  ```javascript
25
31
  const initialArray = ['a', 'b', 'c'];
26
32
 

13

テキスト修正

2018/05/27 21:26

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -13,12 +13,10 @@
13
13
  const diff = (ar1, ar2) => [[ar2,ar1], [ar1,ar2]].map(e => _.difference(...e));
14
14
  ```
15
15
 
16
- 上記の関数 `diff(ar1, ar2)` は、
16
+ 上記の関数 `diff(ar1, ar2)` は、配列 ar1, ar2の差分を、
17
+ **[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] **
18
+ という配列として返す関数になっており、これがご質問にある、
17
19
 
18
- 配列 ar1, ar2の差分を、**[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] ** という配列として返す
19
-
20
- 関数になっており、これがご質問にある、
21
-
22
20
  > 同時に抽出する
23
21
 
24
22
  という働きをしてくれるものになっています。たとえば、

12

テキスト修正

2018/05/27 21:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
File without changes

11

テキスト修正

2018/05/27 21:18

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -15,9 +15,9 @@
15
15
 
16
16
  上記の関数 `diff(ar1, ar2)` は、
17
17
 
18
- 配列 ar1 ar2の差分を、**[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] ** という配列として返す関数
18
+ 配列 ar1, ar2の差分を、**[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] ** という配列として返す
19
19
 
20
- になっており、これがご質問にある、
20
+ 関数になっており、これがご質問にある、
21
21
 
22
22
  > 同時に抽出する
23
23
 

10

テキスト修正

2018/05/27 21:18

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  上記の関数 `diff(ar1, ar2)` は、
17
17
 
18
- **配列 ar1、 ar2の差分を、[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] という配列として返す関数**
18
+ 配列 ar1、 ar2の差分を、**[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] ** という配列として返す関数
19
19
 
20
20
  になっており、これがご質問にある、
21
21
 

9

テキスト修正

2018/05/27 21:17

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,41 +1,27 @@
1
1
  こんにちは。
2
2
 
3
- 2つの配列a, b を集合と考えたときに、[lodash](https://lodash.com/) の [difference](https://lodash.com/docs/4.17.10#difference) を使うと、
4
- 差集合 a - b に相当する配列を取得できますので、これを利用します。
3
+ [lodash](https://lodash.com/) の [difference](https://lodash.com/docs/4.17.10#difference) を使うと、2つの配列 ar1, ar2 を集合と考えたときに、[差集合](https://ja.wikipedia.org/wiki/%E5%B7%AE%E9%9B%86%E5%90%88) ar1 - ar2 に相当する配列を
5
4
 
6
- まずご自身の環境にあわせて、 `lodash`を以下のようにして使えるようにします。
7
-
8
- ・lodash をNode.js で使う場合:
9
-
10
- npm または yarn で lodash をインストールして
11
5
  ```javascript
12
- const _ = require('lodash');
6
+ _.difference(ar1, ar2)
13
7
  ```
14
8
 
15
- ・lodash をブラウザで使う場合:
16
- ```html
9
+ で取得できます。
17
- <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
10
+ これを使って、次のような関数 `diff` を定義します。
18
- ```
19
11
 
20
- 上記のいずれかによって、 `_` を使えるようにしておくと、2つの配列a, b を集合と考えたときの
21
- 差集合 a - b は、
22
-
23
12
  ```javascript
24
- _.difference(a, b)
13
+ const diff = (ar1, ar2) => [[ar2,ar1], [ar1,ar2]].map(e => _.difference(...e));
25
14
  ```
26
15
 
27
- で取得できます。これを使って、次ような関数 `diff` を定義します。
16
+ 上記の関数 `diff(ar1, ar2)` は、
28
17
 
29
- ```javascript
30
- // 配列 ar1、 ar2の差分を配列として返す関数
31
- const diff = (ar1, ar2) => [[ar2,ar1], [ar1,ar2]].map(e => _.difference(...e));
18
+ **配列 ar1 ar2の差分を、[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] という配列として返す関数**
32
- ```
33
19
 
34
- 上記の関数 `diff` が、ご質問にある、
20
+ になっておりこれがご質問にある、
21
+
35
22
  > 同時に抽出する
36
23
 
37
- という働きをしてくれるものになっています。
24
+ という働きをしてくれるものになっています。たとえば、
38
- たとえば、
39
25
 
40
26
  ```javascript
41
27
  const initialArray = ['a', 'b', 'c'];
@@ -49,7 +35,7 @@
49
35
  [ [ 'd' ], [ 'a', 'c' ] ]
50
36
  ```
51
37
 
52
- 上記の配列は2つの配列を要素とする配列で
38
+ 上記は2つの配列を要素とする配列で
53
39
 
54
40
   ・1つ目の配列 `[ 'd' ]` は、 initialArray に追加されたもの、
55
41
 
@@ -63,4 +49,4 @@
63
49
 
64
50
  この回答のやり方で実装したサンプルコードを、以下のURLに上げておきました。
65
51
 
66
- [https://jsfiddle.net/jun68ykt/pLuzg0u4/1/](https://jsfiddle.net/jun68ykt/pLuzg0u4/1/)
52
+ [https://jsfiddle.net/jun68ykt/pLuzg0u4/2/](https://jsfiddle.net/jun68ykt/pLuzg0u4/2/)

8

テキスト修正

2018/05/27 21:03

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,7 +1,5 @@
1
1
  こんにちは。
2
2
 
3
- 以下のような方法はいかがでしょうか。
4
-
5
3
  2つの配列a, b を集合と考えたときに、[lodash](https://lodash.com/) の [difference](https://lodash.com/docs/4.17.10#difference) を使うと、
6
4
  差集合 a - b に相当する配列を取得できますので、これを利用します。
7
5
 
@@ -19,13 +17,14 @@
19
17
  <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
20
18
  ```
21
19
 
22
- 上記のいずれかによって、 `_` を使えるようにしておいて差集合 a - b を求める
20
+ 上記のいずれかによって、 `_` を使えるようにしておくと2つの配列a, b を集合と考えたときの
21
+ 差集合 a - b は、
23
22
 
24
23
  ```javascript
25
24
  _.difference(a, b)
26
25
  ```
27
26
 
28
- を使って、次のような関数 `diff` を定義します。
27
+ で取得できます。これを使って、次のような関数 `diff` を定義します。
29
28
 
30
29
  ```javascript
31
30
  // 配列 ar1、 ar2の差分を配列として返す関数
@@ -57,9 +56,11 @@
57
56
   ・2つ目の配列 `[ 'a', 'c' ]` は、 initialArray から削除されたもの
58
57
 
59
58
  となります。
59
+ 以上参考になれば幸いです。
60
60
 
61
+ ---
61
- このやり方で実装したサンプルコードを、以下のURLに上げておきました。
62
+ **補足**
62
63
 
63
- [https://jsfiddle.net/jun68ykt/pLuzg0u4/1/](https://jsfiddle.net/jun68ykt/pLuzg0u4/1/)
64
+ この回答のやり方で実装したサンプルコードを、以下のURLに上げておきました。
64
65
 
65
- 以上参考になれば幸いです。
66
+ [https://jsfiddle.net/jun68ykt/pLuzg0u4/1/](https://jsfiddle.net/jun68ykt/pLuzg0u4/1/)

7

テキスト修正

2018/05/27 15:57

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -8,6 +8,8 @@
8
8
  まずご自身の環境にあわせて、 `lodash`を以下のようにして使えるようにします。
9
9
 
10
10
  ・lodash をNode.js で使う場合:
11
+
12
+ npm または yarn で lodash をインストールして
11
13
  ```javascript
12
14
  const _ = require('lodash');
13
15
  ```

6

テキスト修正

2018/05/27 15:48

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -33,7 +33,7 @@
33
33
  上記の関数 `diff` が、ご質問にある、
34
34
  > 同時に抽出する
35
35
 
36
- という働きをしてくれるものになっていると思いますが、いかがでしょう?
36
+ という働きをしてくれるものになっています
37
37
  たとえば、
38
38
 
39
39
  ```javascript
@@ -58,6 +58,6 @@
58
58
 
59
59
  このやり方で実装したサンプルコードを、以下のURLに上げておきました。
60
60
 
61
- [https://jsfiddle.net/jun68ykt/pLuzg0u4/](https://jsfiddle.net/jun68ykt/pLuzg0u4/)
61
+ [https://jsfiddle.net/jun68ykt/pLuzg0u4/1/](https://jsfiddle.net/jun68ykt/pLuzg0u4/1/)
62
62
 
63
63
  以上参考になれば幸いです。

5

ソース修正

2018/05/27 15:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -26,7 +26,8 @@
26
26
  を使って、次のような関数 `diff` を定義します。
27
27
 
28
28
  ```javascript
29
+ // 配列 ar1、 ar2の差分を配列として返す関数
29
- const diff = (a, b) => [[b,a], [a,b]].map(e => _.difference(...e));
30
+ const diff = (ar1, ar2) => [[ar2,ar1], [ar1,ar2]].map(e => _.difference(...e));
30
31
  ```
31
32
 
32
33
  上記の関数 `diff` が、ご質問にある、

4

テキスト修正

2018/05/27 15:18

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,23 +5,25 @@
5
5
  2つの配列a, b を集合と考えたときに、[lodash](https://lodash.com/) の [difference](https://lodash.com/docs/4.17.10#difference) を使うと、
6
6
  差集合 a - b に相当する配列を取得できますので、これを利用します。
7
7
 
8
+ まずご自身の環境にあわせて、 `lodash`を以下のようにして使えるようにします。
9
+
8
- lodash をNode.js で使う場合:
10
+ lodash をNode.js で使う場合:
9
11
  ```javascript
10
12
  const _ = require('lodash');
11
13
  ```
12
14
 
13
- lodash をブラウザで使う場合:
15
+ lodash をブラウザで使う場合:
14
16
  ```html
15
17
  <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
16
18
  ```
17
19
 
18
- 上記のいずれかによって、 `_` を使えるようにしておいて、
20
+ 上記のいずれかによって、 `_` を使えるようにしておいて、差集合 a - b を求める
19
21
 
20
22
  ```javascript
21
23
  _.difference(a, b)
22
24
  ```
23
25
 
24
- 上記の `difference` を使って、以下のような関数 `diff` を定義します。
26
+ を使って、のような関数 `diff` を定義します。
25
27
 
26
28
  ```javascript
27
29
  const diff = (a, b) => [[b,a], [a,b]].map(e => _.difference(...e));

3

テキスト修正

2018/05/27 15:15

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -3,19 +3,27 @@
3
3
  以下のような方法はいかがでしょうか。
4
4
 
5
5
  2つの配列a, b を集合と考えたときに、[lodash](https://lodash.com/) の [difference](https://lodash.com/docs/4.17.10#difference) を使うと、
6
- 差集合 a - b に相当する配列を以下で取得できます。
6
+ 差集合 a - b に相当する配列を取得できますので、これを利用します
7
7
 
8
+ lodash をNode.js で使う場合:
8
9
  ```javascript
9
10
  const _ = require('lodash');
11
+ ```
10
12
 
13
+ lodash をブラウザで使う場合:
14
+ ```html
15
+ <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
16
+ ```
17
+
18
+ 上記のいずれかによって、 `_` を使えるようにしておいて、
19
+
20
+ ```javascript
11
21
  _.difference(a, b)
12
22
  ```
13
23
 
14
- これを使って、以下のような関数 `diff` を定義します。
24
+ 上記の `difference` を使って、以下のような関数 `diff` を定義します。
15
25
 
16
26
  ```javascript
17
- const _ = require('lodash');
18
-
19
27
  const diff = (a, b) => [[b,a], [a,b]].map(e => _.difference(...e));
20
28
  ```
21
29
 
@@ -45,4 +53,8 @@
45
53
 
46
54
  となります。
47
55
 
56
+ このやり方で実装したサンプルコードを、以下のURLに上げておきました。
57
+
58
+ [https://jsfiddle.net/jun68ykt/pLuzg0u4/](https://jsfiddle.net/jun68ykt/pLuzg0u4/)
59
+
48
60
  以上参考になれば幸いです。

2

テキスト修正

2018/05/27 15:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,12 +1,7 @@
1
1
  こんにちは。
2
2
 
3
- ご質問にある、
3
+ 以下のような方法はいかがでしょうか。
4
4
 
5
- > 理想は同時に抽出する方法ですが、それは難しいのではないかと思っているいたりするので、
6
- よりスマートに別々に抽出する方法がありましたら、
7
-
8
- の一例です。
9
-
10
5
  2つの配列a, b を集合と考えたときに、[lodash](https://lodash.com/) の [difference](https://lodash.com/docs/4.17.10#difference) を使うと、
11
6
  差集合 a - b に相当する配列を以下で取得できます。
12
7
 
@@ -24,8 +19,12 @@
24
19
  const diff = (a, b) => [[b,a], [a,b]].map(e => _.difference(...e));
25
20
  ```
26
21
 
27
- 上記の `diff` を使うとたとえば
22
+ 上記の関数 `diff` ご質問にある、
23
+ > 同時に抽出する
28
24
 
25
+ という働きをしてくれるものになっていると思いますが、いかがでしょう?
26
+ たとえば、
27
+
29
28
  ```javascript
30
29
  const initialArray = ['a', 'b', 'c'];
31
30
 

1

テキスト修正

2018/05/27 14:43

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -24,7 +24,7 @@
24
24
  const diff = (a, b) => [[b,a], [a,b]].map(e => _.difference(...e));
25
25
  ```
26
26
 
27
- 上記の `diff` を使うと、
27
+ 上記の `diff` を使うと、たとえば
28
28
 
29
29
  ```javascript
30
30
  const initialArray = ['a', 'b', 'c'];