回答編集履歴
1
stackoverflowの回答も参照
answer
CHANGED
@@ -6,5 +6,34 @@
|
|
6
6
|
const dayEdited = {dayTypeId, nonReservedVisits, reservedVisits, canceledReservations, workStaffIds}
|
7
7
|
```
|
8
8
|
|
9
|
+
スタフロの質問で似たようなのを見つけました。
|
10
|
+
[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)
|
11
|
+
|
12
|
+
> ```JavaScript
|
13
|
+
> const object = { a: 5, b: 6, c: 7 };
|
14
|
+
> const picked = (({ a, c }) => ({ a, c }))(object);
|
15
|
+
>
|
16
|
+
> console.log(picked); // { a: 5, c: 7 }
|
17
|
+
> ```
|
18
|
+
|
19
|
+
模範解答はこれでまぁそうだよねって感じ、おっと思いましたが結局キー名を2度書くのも同様で微妙です。
|
20
|
+
解答欄でビビっときたのがこれですね。
|
21
|
+
|
22
|
+
> ```JavaScript
|
23
|
+
> var subset = ['color', 'height'].reduce(function(o, k) { o[k] = elmo[k]; return o; > }, {});
|
24
|
+
> ```
|
25
|
+
|
26
|
+
[Array.prototype.reduce](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)は難解ですが、ネイティブのJSでは配列から作れないものがないといったレベルで何でも加工出来ますので、是非覚えましょう。
|
27
|
+
これベースで質問文を書き直すとこうなります。
|
28
|
+
|
29
|
+
```JavaScript
|
30
|
+
const dayEdited = ['dayTypeId', 'nonReservedVisits', 'reservedVisits', 'canceledReservations', 'workStaffIds'].reduce((obj, key) => {
|
31
|
+
obj[key] = this.props.day[key];
|
32
|
+
return obj;
|
33
|
+
}, {})
|
34
|
+
```
|
35
|
+
|
36
|
+
---
|
37
|
+
|
9
38
|
ライブラリが使えるなら[Ramda.js](https://ramdajs.com/)の[pick](https://ramdajs.com/docs/#pick)かすぐ下にあるpickAllあたりを採用すれば一撃です。
|
10
39
|
[Lodash](https://lodash.com/)にも[pick](https://lodash.com/docs/4.17.11#pick)があるので、何かしらのライブラリを忍ばせておくと何かと便利だと思います。
|