回答編集履歴

1

stackoverflowの回答も参照

2018/12/04 09:48

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -14,6 +14,64 @@
14
14
 
15
15
 
16
16
 
17
+ スタフロの質問で似たようなのを見つけました。
18
+
19
+ [How to get a subset of a javascript object's properties](https://stackoverflow.com/questions/17781472/how-to-get-a-subset-of-a-javascript-objects-properties)
20
+
21
+
22
+
23
+ > ```JavaScript
24
+
25
+ > const object = { a: 5, b: 6, c: 7 };
26
+
27
+ > const picked = (({ a, c }) => ({ a, c }))(object);
28
+
29
+ >
30
+
31
+ > console.log(picked); // { a: 5, c: 7 }
32
+
33
+ > ```
34
+
35
+
36
+
37
+ 模範解答はこれでまぁそうだよねって感じ、おっと思いましたが結局キー名を2度書くのも同様で微妙です。
38
+
39
+ 解答欄でビビっときたのがこれですね。
40
+
41
+
42
+
43
+ > ```JavaScript
44
+
45
+ > var subset = ['color', 'height'].reduce(function(o, k) { o[k] = elmo[k]; return o; > }, {});
46
+
47
+ > ```
48
+
49
+
50
+
51
+ [Array.prototype.reduce](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)は難解ですが、ネイティブのJSでは配列から作れないものがないといったレベルで何でも加工出来ますので、是非覚えましょう。
52
+
53
+ これベースで質問文を書き直すとこうなります。
54
+
55
+
56
+
57
+ ```JavaScript
58
+
59
+ const dayEdited = ['dayTypeId', 'nonReservedVisits', 'reservedVisits', 'canceledReservations', 'workStaffIds'].reduce((obj, key) => {
60
+
61
+ obj[key] = this.props.day[key];
62
+
63
+ return obj;
64
+
65
+ }, {})
66
+
67
+ ```
68
+
69
+
70
+
71
+ ---
72
+
73
+
74
+
17
75
  ライブラリが使えるなら[Ramda.js](https://ramdajs.com/)の[pick](https://ramdajs.com/docs/#pick)かすぐ下にあるpickAllあたりを採用すれば一撃です。
18
76
 
19
77
  [Lodash](https://lodash.com/)にも[pick](https://lodash.com/docs/4.17.11#pick)があるので、何かしらのライブラリを忍ばせておくと何かと便利だと思います。