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

回答編集履歴

5

回答追加

2019/01/31 18:41

投稿

shinji709
shinji709

スコア805

answer CHANGED
@@ -4,4 +4,15 @@
4
4
  .reduce((acc, {id, name}) => (acc[id] = acc[id] || name, acc), [])
5
5
  .reduce((acc, name, id) => [...acc, {id, name}], []);
6
6
  console.log(result);
7
+ ```
8
+ .
9
+ もうひとつ思いついたので追記します。
10
+ ```JavaScript
11
+ const memo = [];
12
+ const result = [...member1, ...member2]
13
+ .reduce((acc, {id, name}) => memo[id]
14
+ ? acc // メモ済みのIDだったらaccに追加しないで飛ばす
15
+ : (memo[id] = true, [...acc, {id, name}]) // 初出のIDならメモして、追加
16
+ , []);
17
+ console.log(result);
7
18
  ```

4

ミスの修正

2019/01/31 18:41

投稿

shinji709
shinji709

スコア805

answer CHANGED
@@ -1,1 +1,7 @@
1
+ こちらはどうでしょう?
2
+ ```JavaScript
3
+ const result = [...member1, ...member2]
4
+ .reduce((acc, {id, name}) => (acc[id] = acc[id] || name, acc), [])
5
+ .reduce((acc, name, id) => [...acc, {id, name}], []);
1
- 問題勘違いしてました。ちょっと落ち着いて考え直します
6
+ console.log(result);
7
+ ```

3

問題勘違いしてました

2019/01/29 13:23

投稿

shinji709
shinji709

スコア805

answer CHANGED
@@ -1,9 +1,1 @@
1
- スマートな方法を探していると聞いてデブな私が来ました。
1
+ 問題勘違いしてました。ちょっと落ち着いて考え直します
2
- ES2015で以下のように書けます。
3
- ```javascript
4
- const result = [...member1, ...member2].reduce((acc, {id, name}) => ([{id, name}, ...acc]), []);
5
- console.log(result);
6
- ```
7
- なお、同じIDで違う値が来たとき新しい方の値で上書きしたいときは([...acc, {id, name}])にしてくださいね。
8
-
9
- ※ミスして訂正しました。失礼しました

2

ミスの修正

2019/01/29 12:34

投稿

shinji709
shinji709

スコア805

answer CHANGED
@@ -1,1 +1,9 @@
1
+ スマートな方法を探していると聞いてデブな私が来ました。
2
+ ES2015で以下のように書けます。
3
+ ```javascript
4
+ const result = [...member1, ...member2].reduce((acc, {id, name}) => ([{id, name}, ...acc]), []);
5
+ console.log(result);
6
+ ```
7
+ なお、同じIDで違う値が来たとき新しい方の値で上書きしたいときは([...acc, {id, name}])にしてくださいね。
8
+
1
- すみません間違えてました。一旦削除しま
9
+ ※ミスし訂正しました。失礼しました

1

問題を勘違い

2019/01/29 12:30

投稿

shinji709
shinji709

スコア805

answer CHANGED
@@ -1,7 +1,1 @@
1
- スマートな方法を探しいると聞いてデブな私が来ました。
2
- ES2015の[Computed property names](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer#%E8%A8%88%E7%AE%97%E3%81%95%E3%82%8C%E3%81%9F%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E5%90%8D)という機能を使って以下のように書けます。
3
- ```javascript
4
- const result = [...member1, ...member2].reduce((acc, {id, name}) => ({[id]: name, ...acc}), {});
5
- console.log(result);
6
- ```
7
- なお、同じIDで違う値が来たとき新しい方の値で上書きしたいときは({...acc, [id]: name})にしてくださいね。
1
+ すみません間違えてました。一旦削除します