回答編集履歴
18
テキスト修正
answer
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
**補足3**
|
75
75
|
|
76
76
|
「追加された要素の配列と、削除された要素の配列を同時に作る」というのが与件ですが、
|
77
|
-
私見としましては、より**”同時に”**
|
77
|
+
私見としましては、より**”同時に”感** (?)のあるコードは、以下のようなものになります。
|
78
78
|
|
79
79
|
|
80
80
|
```javascript
|
17
テキスト修正
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
テキスト修正
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
テキスト修正
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
テキスト修正
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
テキスト修正
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
テキスト修正
answer
CHANGED
File without changes
|
11
テキスト修正
answer
CHANGED
@@ -15,9 +15,9 @@
|
|
15
15
|
|
16
16
|
上記の関数 `diff(ar1, ar2)` は、
|
17
17
|
|
18
|
-
配列 ar1
|
18
|
+
配列 ar1, ar2の差分を、**[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] ** という配列として返す
|
19
19
|
|
20
|
-
になっており、これがご質問にある、
|
20
|
+
関数になっており、これがご質問にある、
|
21
21
|
|
22
22
|
> 同時に抽出する
|
23
23
|
|
10
テキスト修正
answer
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
上記の関数 `diff(ar1, ar2)` は、
|
17
17
|
|
18
|
-
|
18
|
+
配列 ar1、 ar2の差分を、**[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] ** という配列として返す関数
|
19
19
|
|
20
20
|
になっており、これがご質問にある、
|
21
21
|
|
9
テキスト修正
answer
CHANGED
@@ -1,41 +1,27 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
|
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
|
-
|
6
|
+
_.difference(ar1, ar2)
|
13
7
|
```
|
14
8
|
|
15
|
-
・lodash をブラウザで使う場合:
|
16
|
-
|
9
|
+
で取得できます。
|
17
|
-
|
10
|
+
これを使って、次のような関数 `diff` を定義します。
|
18
|
-
```
|
19
11
|
|
20
|
-
上記のいずれかによって、 `_` を使えるようにしておくと、2つの配列a, b を集合と考えたときの
|
21
|
-
差集合 a - b は、
|
22
|
-
|
23
12
|
```javascript
|
24
|
-
_.difference(
|
13
|
+
const diff = (ar1, ar2) => [[ar2,ar1], [ar1,ar2]].map(e => _.difference(...e));
|
25
14
|
```
|
26
15
|
|
27
|
-
|
16
|
+
上記の関数 `diff(ar1, ar2)` は、
|
28
17
|
|
29
|
-
```javascript
|
30
|
-
// 配列 ar1、 ar2の差分を配列として返す関数
|
31
|
-
|
18
|
+
**配列 ar1、 ar2の差分を、[ 差集合(ar2-ar1)の配列, 差集合(ar1-ar2)の配列 ] という配列として返す関数**
|
32
|
-
```
|
33
19
|
|
34
|
-
|
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
|
-
上記
|
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/
|
52
|
+
[https://jsfiddle.net/jun68ykt/pLuzg0u4/2/](https://jsfiddle.net/jun68ykt/pLuzg0u4/2/)
|
8
テキスト修正
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
|
-
上記のいずれかによって、 `_` を使えるようにしてお
|
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
|
-
|
62
|
+
**補足**
|
62
63
|
|
63
|
-
|
64
|
+
この回答のやり方で実装したサンプルコードを、以下のURLに上げておきました。
|
64
65
|
|
65
|
-
|
66
|
+
[https://jsfiddle.net/jun68ykt/pLuzg0u4/1/](https://jsfiddle.net/jun68ykt/pLuzg0u4/1/)
|
7
テキスト修正
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
テキスト修正
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
ソース修正
answer
CHANGED
@@ -26,7 +26,8 @@
|
|
26
26
|
を使って、次のような関数 `diff` を定義します。
|
27
27
|
|
28
28
|
```javascript
|
29
|
+
// 配列 ar1、 ar2の差分を配列として返す関数
|
29
|
-
const diff = (
|
30
|
+
const diff = (ar1, ar2) => [[ar2,ar1], [ar1,ar2]].map(e => _.difference(...e));
|
30
31
|
```
|
31
32
|
|
32
33
|
上記の関数 `diff` が、ご質問にある、
|
4
テキスト修正
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
|
-
|
26
|
+
を使って、次のような関数 `diff` を定義します。
|
25
27
|
|
26
28
|
```javascript
|
27
29
|
const diff = (a, b) => [[b,a], [a,b]].map(e => _.difference(...e));
|
3
テキスト修正
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
|
-
|
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
テキスト修正
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
テキスト修正
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'];
|