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

回答編集履歴

75

テキスト修正

2018/10/10 02:59

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -73,7 +73,7 @@
73
73
 
74
74
  > 周りに相談できる人もいない
75
75
 
76
- ともありました。そのような状況の中で Lodashを見つけ出して、それを使ってみようと思い、実際コードを書いてみたというチャレジは**とてもよい**と思います。ですので、まずは Lodashを使って、主題の「ネストされたオブジェクト間の差分を取得する方法」を探ってみましょう。
76
+ ともありました。そのような状況の中で Lodashを見つけ出して、それを使ってみようと思い、実際コードを書いてみたというチャレジは**とてもよい**と思います。ですので、まずは Lodashを使って、主題の「ネストされたオブジェクト間の差分を取得する方法」を探ってみましょう。
77
77
 
78
78
  ご質問から業務でコードを書いている中での課題と思われますが、仕事の中でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私の場合は、という限られた話にはなりますが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissueに拠り所を求めることが多いです。
79
79
 

74

テキスト修正

2018/10/10 02:59

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -185,7 +185,7 @@
185
185
 
186
186
  によって、差分のあるプロパティだけを取り出せると考えたのでしたら、 厳密な比較演算子`===` についての理解を点検する必要があるのでは? ということです。ですので、
187
187
 
188
- > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
188
+ > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
189
189
 
190
190
  のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤとがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきと思います。
191
191
 

73

テキスト修正

2018/10/08 14:18

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -75,7 +75,7 @@
75
75
 
76
76
  ともありました。そのような状況の中で Lodashを見つけ出して、それを使ってみようと思い、実際コードを書いてみたというチャレジは**とてもよい**と思います。ですので、まずは Lodashを使って、主題の「ネストされたオブジェクト間の差分を取得する方法」を探ってみましょう。
77
77
 
78
- ご質問から業務でコードを書いている中での課題と思われますが、仕事の中でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私の場合は、という限られた話にはなりますが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissueに拠り所を求めるパターンが多いです。
78
+ ご質問から業務でコードを書いている中での課題と思われますが、仕事の中でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私の場合は、という限られた話にはなりますが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissueに拠り所を求めることが多いです。
79
79
 
80
80
  このご質問の解決策を見つけるときに、Lodashを使うというのは筋として悪くないので、
81
81
 

72

テキスト修正

2018/10/08 14:16

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- オブジェクトや配列に対してちょっと込み入った操作をするときに Lodash を利用するという選択自体は、間違いではありません。実際、私も同じ課題に直面したら、まずは、Lodash に便利なメソッドはないか?と探すと思います。
3
+ オブジェクトや配列に対してちょっと込み入った操作をするときに Lodash を利用するという選択自体は、間違いではありません。実際、私も同じ課題に直面したら、まずは、Lodash に便利なメソッドはないか?と探すと思います。
4
4
 
5
5
  ただし、ご質問に挙げられている以下の [_.omitBy](https://lodash.com/docs/4.17.10#omitBy) を使ったコード
6
6
 

71

テキスト修正

2018/10/08 14:03

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  オブジェクトや配列に対してちょっと込み入った操作をするときに Lodash を利用するという選択自体は、間違いではありません。(実際、私も同じ課題に直面したら、まずは、Lodash に便利なメソッドはないか?と探すと思います。)
4
4
 
5
- ただし、ご質問に挙げられている
5
+ ただし、ご質問に挙げられている以下の [_.omitBy](https://lodash.com/docs/4.17.10#omitBy) を使ったコード
6
6
 
7
7
  ```javascript
8
8
  _.omitBy(objectB, (v, k) => objectA[k] === v);
@@ -55,13 +55,13 @@
55
55
 
56
56
  上記を勘案しまして、オブジェクトの差分を得るのにLodashを使ってみたこと、および
57
57
  `_.omitBy(objectB, (v, k) => objectA[k] === v)`
58
- というコードを拝読して、お伝えしたいこととしては、以下の3点
58
+ というコードを拝読して、お伝えしたいこととしては、以下の3点です。
59
59
 
60
60
  1. Lodashを使った修正案の見つけ方
61
61
  2. Lodashを使わずに最小限の要求を満たすものを書いてみる
62
62
  3. 基礎を見直すことと応用的なものを使うことのバランスについて
63
63
 
64
- です。これらについて以下順を追って回答します。
64
+ これらについて以下順を追って回答します。
65
65
 
66
66
  ### 1. Lodashを使った修正案の見つけ方
67
67
 

70

テキスト修正

2018/10/08 13:42

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -245,7 +245,7 @@
245
245
 
246
246
  ここは意見の分かれるところだと思いますが、自分の考えを書いておきます。
247
247
 
248
- 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけません。」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような、言わば巷で流行の道具に目が行って、それに飛びつくことができるというのは、(これからもキープすべき)良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論することができ、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
248
+ 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけません。」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような、言わば巷で流行の道具に目が行って、それに飛びつくことができるというのは、(これからもキープすべき)良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと試行錯誤した結果、「基礎力が足りない」と自分でちゃんと納得して結論することができ、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
249
249
 
250
250
    
251
251
  以上、参考になれば幸いです。

69

テキスト修正

2018/10/08 08:10

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -245,7 +245,7 @@
245
245
 
246
246
  ここは意見の分かれるところだと思いますが、自分の考えを書いておきます。
247
247
 
248
- 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような、言わば巷で流行の道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論することができ、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
248
+ 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけません。」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような、言わば巷で流行の道具に目が行って、それに飛びつくことができるというのは、(これからもキープすべき)良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論することができ、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
249
249
 
250
250
    
251
251
  以上、参考になれば幸いです。

68

テキスト修正

2018/10/08 07:59

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -187,7 +187,7 @@
187
187
 
188
188
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
189
189
 
190
- のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤとがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきと思います。
190
+ のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤとがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきと思います。
191
191
 
192
192
 
193
193
  言い換えると、

67

テキスト修正

2018/10/08 07:53

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -226,7 +226,7 @@
226
226
  updated: 整数(タイムスタンプ),
227
227
  }
228
228
  ```
229
- であることは分かっている2つのオブジェクト objectA と objectB とを比較して差分のプロパティだけを持つオブジェクトを返す関数なりメソッドなりを書いてみるのはいかがでしょうか? これをスクラッチから、Lodashのような便利なものを使わずに書いてみるとよいかもしれません。それがまずはterataillerさんにとっての(次の一歩となる、)
229
+ であることは分かっている2つのオブジェクト objectA と objectB とを比較して差分のプロパティだけを持つオブジェクトを返す関数なりメソッドなりを書いてみるのはいかがでしょうか? これをスクラッチから、Lodashのような便利なものを使わずに書いてみるとよいかもしれません。それがterataillerさんにとっての(次の一歩となる、)
230
230
 
231
231
  > ベターな
232
232
 

66

テキスト修正

2018/10/08 06:36

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -192,7 +192,7 @@
192
192
 
193
193
  言い換えると、
194
194
 
195
- - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながら、どんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、ときに締め切りに追われ限られた開発時間の中で、必要あれば修正も加えて自分の課題解決に使うことができる。
195
+ - Lodash (なり、他の便利な何か)を採用することにしそれを使うために必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながら、どんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、締め切りに追われがちな限られた開発時間の中で、必要あれば修正も加えて自分の目の前にある課題解決に使うことができる。
196
196
 
197
197
    というのは応用編のスキル、しかもプログラミングの技術力は半分であとの半分は仕事をさばく器用さに近いものですが、それよりも
198
198
 

65

テキスト修正

2018/10/08 06:32

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -183,7 +183,7 @@
183
183
  _.omitBy(objectB, (v, k) => objectA[k] === v)
184
184
  ```
185
185
 
186
- によって、差分のあるプロパティだけを取り出せると考えでしたら、 厳密な比較演算子`===` についての理解を点検する必要があるのでは? ということです。ですので、
186
+ によって、差分のあるプロパティだけを取り出せると考えたのでしたら、 厳密な比較演算子`===` についての理解を点検する必要があるのでは? ということです。ですので、
187
187
 
188
188
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
189
189
 

64

テキスト修正

2018/10/08 06:27

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -226,7 +226,7 @@
226
226
  updated: 整数(タイムスタンプ),
227
227
  }
228
228
  ```
229
- であることは分かっている2つのオブジェクト objectA と objectB とを比較して、objectBほうが新しいものであるとして更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、(これ自力スクラッチから書いてみるとよいかもしれません。それがまずはterataillerさんにとっての(次の一歩となる、)
229
+ であることは分かっている2つのオブジェクト objectA と objectB とを比較して差分のプロパティだけを持つオブジェクトを返す関数なりメソッドなりを書いてみるのいかがしょうか? これをスクラッチから、Lodashのような便利なものを使わずに書いてみるとよいかもしれません。それがまずはterataillerさんにとっての(次の一歩となる、)
230
230
 
231
231
  > ベターな
232
232
 
@@ -235,9 +235,9 @@
235
235
 
236
236
  > 中身がブラックボックスなので、なんか良くわからないけど出来たという感覚
237
237
 
238
- と書かれている、誰かが作った中身の分からないものに乗ってしまっていることでのモヤモヤ(これは良いほうのモヤモヤです)を感じることのできるセンスを維持することも大事ですので、そのための練習問題として、(上記の、ある特定の形式のオブジェクトのプロパティ比較と差分オブジェクトの作成が書けた後、) 一般的なオブジェクトの比較という大きいテーマに、Lodash を使わないで取り組むのもよい修練になると思います。それに取り組むと、おそらく
238
+ と書かれている、誰かが作った中身の分からないものに乗ってしまっていることでのモヤモヤ(これは良いほうのモヤモヤです)を感じることのできるセンスを維持することも大事ですので、そのための練習問題として、(上記の、ある特定の形式のオブジェクトのプロパティ比較と差分オブジェクトの作成が書けた後、) 一般的なオブジェクトの比較という大きいテーマに、Lodash を使わないで取り組むのもよい修練になると思います。それに取り組むと、おそらく
239
239
 
240
- - [Generic deep diff between two objects](https://stackoverflow.com/questions/8572826/generic-deep-diff-between-two-objects)
240
+ - stackoverflow: [Generic deep diff between two objects](https://stackoverflow.com/questions/8572826/generic-deep-diff-between-two-objects)
241
241
 
242
242
  についている回答のようなコードを書くことになり、JavaScriptの基礎確認に役立つと思います。
243
243
 

63

テキスト修正

2018/10/08 05:49

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -47,17 +47,21 @@
47
47
  }
48
48
  ```
49
49
 
50
+ であることが、console.logの出力で確認できます。
50
- であるとが、console.logの出力で確認できます。これの検証用のサンプルを以下に上げましたので、ご確認ください。
51
+ これの検証用のサンプルを以下に上げましたので、ご確認ください。
51
52
 
52
- - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
53
+ - **内容が同じオブジェクトでもうまくいかない例:** [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
53
54
 
54
- 上記の `_.omitBy(objectB, (v, k) => objectA[k] === v)` というコードを拝読して、お伝えしたいこととしては以下の3点
55
55
 
56
+ 上記を勘案しまして、オブジェクトの差分を得るのにLodashを使ってみたこと、および
57
+ `_.omitBy(objectB, (v, k) => objectA[k] === v)`
58
+ というコードを拝読して、お伝えしたいこととしては、以下の3点
59
+
56
60
  1. Lodashを使った修正案の見つけ方
57
61
  2. Lodashを使わずに最小限の要求を満たすものを書いてみる
58
62
  3. 基礎を見直すことと応用的なものを使うことのバランスについて
59
63
 
60
- です。
64
+ です。これらについて以下順を追って回答します。
61
65
 
62
66
  ### 1. Lodashを使った修正案の見つけ方
63
67
 
@@ -69,7 +73,7 @@
69
73
 
70
74
  > 周りに相談できる人もいない
71
75
 
72
- ともありました。そのような状況の中で Lodashを見つけ出して、それを使ってみようと思い、実際コードを書いてみたというチャレジはとてもよいと思います。ですので、まずは Lodashを使って、主題の「ネストされたオブジェクト間の差分を取得する方法」を探ってみま
76
+ ともありました。そのような状況の中で Lodashを見つけ出して、それを使ってみようと思い、実際コードを書いてみたというチャレジは**とてもよい**と思います。ですので、まずは Lodashを使って、主題の「ネストされたオブジェクト間の差分を取得する方法」を探ってみましょう
73
77
 
74
78
  ご質問から業務でコードを書いている中での課題と思われますが、仕事の中でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私の場合は、という限られた話にはなりますが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissueに拠り所を求めるパターンが多いです。
75
79
 
@@ -161,7 +165,7 @@
161
165
  - [https://jsfiddle.net/jun68ykt/Lpwe0952/3/](https://jsfiddle.net/jun68ykt/Lpwe0952/3/)
162
166
 
163
167
 
164
- おり空オブジェクトになります。
168
+ ように、期待どおり空オブジェクトになります。
165
169
 
166
170
 
167
171
 
@@ -173,7 +177,7 @@
173
177
 
174
178
  ### 2. Lodashを使わずに最小限の要求を満たすものを書いてみる
175
179
 
176
- あらためてterataillerさんのご質問を再読して(老婆心ながら)思うところとしては、ご質問にあるコード
180
+ 二点目としまして、あらためてterataillerさんのご質問を再読して(老婆心ながら)思うところとしては、ご質問にあるコード
177
181
 
178
182
  ```javascript
179
183
  _.omitBy(objectB, (v, k) => objectA[k] === v)
@@ -241,7 +245,7 @@
241
245
 
242
246
  ここは意見の分かれるところだと思いますが、自分の考えを書いておきます。
243
247
 
244
- 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような、言わば巷で流行の道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論したうえで、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
248
+ 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような、言わば巷で流行の道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論することが、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
245
249
 
246
250
    
247
251
  以上、参考になれば幸いです。

62

テキスト修正

2018/10/08 05:33

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -190,15 +190,15 @@
190
190
 
191
191
  - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながら、どんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、ときに締め切りに追われる限られた開発時間の中で、必要あれば修正も加えて自分の課題解決に使うことができる。
192
192
 
193
-   というのは応用編のスキルであ、それよりも
193
+   というのは応用編のスキル、しかもプログラミングの技術力は半分であとの半分は仕事をさばく器用さに近いものですが、それよりも
194
194
 
195
- - `===` で true になる条件という基礎知識を正しく活用して、自分の開発業務の範囲内にある、ある特定の形式のオブジェクトを比較するコードを、Lodashのような便利グッズを使わず、スクラッチから難なく書ける。
195
+ - `===` で true になる条件という基礎知識を正しく活用して、自分の開発業務の範囲内にある、ある特定の形式のオブジェクトを比較するコードを、Lodashのような便利グッズを使わず、スクラッチから難なく書ける。
196
196
 
197
197
    というスキルのほうが、獲得すべき順序として優先度が(かなり)高い
198
198
 
199
199
  ということです。
200
200
 
201
- そこで、以下のページ
201
+ そこで、以下に挙げたいくつかのページ
202
202
 
203
203
  - MDN:[比較演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
204
204
  - [開眼!JavaScript](https://www.amazon.co.jp/dp/487311621X) 1.14節「オブジェクトは同値判定に参照を使用」に掲載の[サンプルコード](http://jsfiddle.net/jseja/4UDYr)
@@ -241,7 +241,7 @@
241
241
 
242
242
  ここは意見の分かれるところだと思いますが、自分の考えを書いておきます。
243
243
 
244
- 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論したうえで、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
244
+ 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような、言わば巷で流行の道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論したうえで、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
245
245
 
246
246
    
247
247
  以上、参考になれば幸いです。

61

テキスト修正

2018/10/08 05:21

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -241,7 +241,7 @@
241
241
 
242
242
  ここは意見の分かれるところだと思いますが、自分の考えを書いておきます。
243
243
 
244
- 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論したうえで、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、基礎に立ち返ということを繰り返すうちに、基礎を見直すことと応用的なものを使うこの間の、自分なりのバランスが出来ていきます。
244
+ 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論したうえで、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、理解不足を感じた基礎項目に立ち返り、基礎を点検できたらまた応用に取り組むということを繰り返すうちに、基礎を見直すことと応用的な取り組みとの間の、自分なりのバランスが出来ていきます。
245
245
 
246
246
    
247
247
  以上、参考になれば幸いです。

60

テキスト修正

2018/10/08 05:15

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -51,13 +51,13 @@
51
51
 
52
52
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
53
53
 
54
- 上記の `_.omitBy(objectB, (v, k) => objectA[k] === v)` というコードを拝読して、お伝えしたいこととして以下の3点
54
+ 上記の `_.omitBy(objectB, (v, k) => objectA[k] === v)` というコードを拝読して、お伝えしたいこととして以下の3点
55
55
 
56
56
  1. Lodashを使った修正案の見つけ方
57
57
  2. Lodashを使わずに最小限の要求を満たすものを書いてみる
58
58
  3. 基礎を見直すことと応用的なものを使うことのバランスについて
59
59
 
60
- を挙げます。
60
+ す。
61
61
 
62
62
  ### 1. Lodashを使った修正案の見つけ方
63
63
 

59

テキスト修正

2018/10/08 05:11

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -241,7 +241,7 @@
241
241
 
242
242
  ここは意見の分かれるところだと思いますが、自分の考えを書いておきます。
243
243
 
244
- 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論したうえで、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。
244
+ 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それで飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論したうえで、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。そのようにして、何か応用的なことをやろうとして、基礎に立ち返るということを繰り返すうちに、基礎を見直すことと応用的なものを使うこととの間の、自分なりのバランスが出来ていきます。
245
245
 
246
246
    
247
247
  以上、参考になれば幸いです。

58

テキスト修正

2018/10/08 04:43

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -241,7 +241,7 @@
241
241
 
242
242
  ここは意見の分かれるところだと思いますが、自分の考えを書いておきます。
243
243
 
244
- 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは、いいセンスだと思います。ですが、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと結論したうえで、その対策を(業務とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。
244
+ 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは良質なセンスだと思います。それ飛びついてはみたものの、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと納得して結論したうえで、その対策を(通常の業務時間とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。
245
245
 
246
246
    
247
247
  以上、参考になれば幸いです。

57

テキスト修正

2018/10/08 04:29

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -244,4 +244,4 @@
244
244
  私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは、いいセンスだと思います。ですが、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと結論したうえで、その対策を(業務とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。
245
245
 
246
246
    
247
- 以上参考になれば幸いです。
247
+ 以上参考になれば幸いです。

56

テキスト修正

2018/10/08 04:17

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  _.omitBy(objectB, (v, k) => objectA[k] === v);
9
9
  ```
10
10
 
11
- だと、更新のあったプロパティだけを抽出するという期待した動作を満たせないのでは?という懸念があります。
11
+ だと、objectB から更新されたプロパティだけを残して他を除去(omit)したオブジェクトを得るという期待した動作を満たせないのでは?という懸念があります。
12
12
  たとえば以下の例
13
13
 
14
14
  ```javascript
@@ -51,22 +51,41 @@
51
51
 
52
52
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
53
53
 
54
+ 上記の `_.omitBy(objectB, (v, k) => objectA[k] === v)` というコードを拝読して、お伝えしたいこととして、以下の3点
54
55
 
55
- そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇し場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私場合は、という限られた話にはなりますが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissueに拠り所を求めるパターンが多いです。
56
+ 1. Lodashを使った修正案見つけ方
57
+ 2. Lodashを使わずに最小限の要求を満たすものを書いてみる
58
+ 3. 基礎を見直すことと応用的なものを使うことのバランスについて
56
59
 
57
- このご質問の解決策見つけるときは、lodashを使うというのは筋として悪くないと思うので、
60
+ 挙げます。
58
61
 
59
- (1) まずは `"lodash difference between two objects"` で[グーグル検索](https://www.google.co.jp/search?q=lodash+ difference +between+two+objects)
62
+ ### 1. Lodashを使った修正案の見つけ方
60
63
 
61
- (2) 検索結果で上位出てきたものをざっと読む。
64
+ ご質問
62
65
 
63
- (3) stackoverflowの投稿出てきたきは、いくつの回答の中でどれが使えそか当たりつける。
66
+ > 調べならなんとかLodashといライブラリ使って
67
+
68
+ とありました。 また、
69
+
70
+ > 周りに相談できる人もいない
71
+
72
+ ともありました。そのような状況の中で Lodashを見つけ出して、それを使ってみようと思い、実際コードを書いてみたというチャレジはとてもよいと思います。ですので、まずは Lodashを使って、主題の「ネストされたオブジェクト間の差分を取得する方法」を探ってみます。
73
+
74
+ ご質問から業務でコードを書いている中での課題と思われますが、仕事の中でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私の場合は、という限られた話にはなりますが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissueに拠り所を求めるパターンが多いです。
75
+
76
+ このご質問の解決策を見つけるときに、Lodashを使うというのは筋として悪くないので、
77
+
78
+ (1) まずは `"lodash difference between two objects"` で[グーグル検索](https://www.google.co.jp/search?q=lodash+ difference +between+two+objects) し、
79
+
80
+ (2) 検索結果で上位に出てきたものをざっと読み、
81
+
82
+ (3) stackoverflowの投稿が出てきたときは、いくつかの回答の中でどれが使えそうか当たりをつけます。
64
83
   
65
84
  (4) 今回のご質問の場合、[Lo-Dash Essentials](https://www.amazon.com/gp/product/B00SVBFBK4/) という著書も書いている、 [Adam Boduch](https://www.amazon.com/Adam-Boduch/e/B005K03U8O) さんによる回答:
66
85
  - [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152)
67
86
 
68
87
 
69
- を拝借するのがよいと思ました。
88
+ を拝借するのがよいと思ました。
70
89
  (ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶのは、個人の判断に委ねられるところなので、別の投稿や回答のほうが使えると判断される方もいらっしゃることでしょう。)
71
90
 
72
91
  上記を経て作成したものが以下です。
@@ -137,9 +156,8 @@
137
156
 
138
157
  - [https://jsfiddle.net/jun68ykt/g0zctujb/14/](https://jsfiddle.net/jun68ykt/g0zctujb/14/)
139
158
 
159
+ この差分抽出コードだと、objectAとobjectBの内容が同じときは、差分のオブジェクトは以下
140
160
 
141
- また、上記で使っている差分抽出コードだと、objectAとobjectBの内容が同じときは、差分のオブジェクトは以下
142
-
143
161
  - [https://jsfiddle.net/jun68ykt/Lpwe0952/3/](https://jsfiddle.net/jun68ykt/Lpwe0952/3/)
144
162
 
145
163
 
@@ -151,24 +169,10 @@
151
169
  「業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。」
152
170
  と書きました。その観点でいうと、(1)から(4)のステップで大事なのは、 まずは(1)でいかに適切な英語で検索できるかだと思ってます。ですので、なるべく、stackoverflow のタイトルや、使いたいモジュールの発信元である GitHubレポジトリの issueタイトルにヒットしそうな検索ワードをあれこれと試します。
153
171
 
154
- 以上参考になれば幸いです。
155
172
 
156
173
 
157
- ## 補足1
174
+ ### 2. Lodashを使わずに最小限の要求を満たすものを書いてみる
158
175
 
159
- 回答に書いたような、確度の高い情報に要領よく達することは、業務でプログラムを書くときには大事なこととはいえ、ご質問に
160
-
161
- > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
162
-
163
- と書かれているモヤモヤ(を感じることのできるセンスを維持すること)もまた大事です。
164
- ですので、一度、ご自身でオブジェクトの内容比較のコードを書いてみるのもよいかもしれません。そうすると、以下の質問
165
-
166
- - [Generic deep diff between two objects](https://stackoverflow.com/questions/8572826/generic-deep-diff-between-two-objects)
167
-
168
- についている回答のようなコードを書くことになり、おそらく JavaScriptの基礎確認に役立つと思います。
169
-
170
- ## 補足2
171
-
172
176
  あらためてterataillerさんのご質問を再読して(老婆心ながら)思うところとしては、ご質問にあるコード
173
177
 
174
178
  ```javascript
@@ -190,7 +194,7 @@
190
194
 
191
195
  - `===` で true になる条件という基礎知識を正しく活用して、自分の開発業務の範囲内にある、ある特定の形式のオブジェクトを比較するコードを、(Lodashのような便利グッズを使わず、スクラッチから)難なく書ける。
192
196
 
193
-   というスキルのほうが、獲得すべき順序として優先度が(かなり)高い
197
+   というスキルのほうが、獲得すべき順序として優先度が(かなり)高い
194
198
 
195
199
  ということです。
196
200
 
@@ -222,4 +226,22 @@
222
226
 
223
227
  > ベターな
224
228
 
225
- コードになると思いますし、それが書けてからLodashを使った汎用的なコードを採用することにしても遅くはありません。
229
+ コードになると思いますし、それが書けてからLodashを使った汎用的なコードを採用することにしても遅くはありません。
230
+ また、ご質問にある、
231
+
232
+ > 中身がブラックボックスなので、なんか良くわからないけど出来たという感覚
233
+
234
+ と書かれている、誰かが作った中身の分からないものに乗ってしまっていることでのモヤモヤ(これは良いほうのモヤモヤです)を感じることのできるセンスを維持することも大事ですので、そのための練習問題として、(上記の、ある特定の形式のオブジェクトのプロパティ比較と差分オブジェクトの作成が書けた後で、) 一般的なオブジェクトの比較という大きいテーマに、Lodash を使わないで取り組むのもよい修練になると思います。それに取り組むと、おそらく
235
+
236
+ - [Generic deep diff between two objects](https://stackoverflow.com/questions/8572826/generic-deep-diff-between-two-objects)
237
+
238
+ についている回答のようなコードを書くことになり、JavaScriptの基礎確認に役立つと思います。
239
+
240
+ ### 3. 基礎を見直すことと応用的なものを使うことのバランスについて
241
+
242
+ ここは意見の分かれるところだと思いますが、自分の考えを書いておきます。
243
+
244
+ 私は「基礎がしっかり身についてないうちに、誰かが作ってくれた便利なものに頼ろうとしてはいけない」というお説教を言うつもりは全くありません。むしろ逆で、基礎があやふやなうちから Lodash (に限らず JQuery でも、React でもいいのですが。) のような道具に目が行って、それに飛びつくことができるというのは、いいセンスだと思います。ですが、それを使ってみようとしたらうまくいかなくて、どうしてうまくいかないのかと自問自答した結果、「基礎力が足りない」と自分でちゃんと結論したうえで、その対策を(業務とは別の時間を使うことになるかもしれませんが。)さっさと始めることが大事です。
245
+
246
+   
247
+ 以上参考になれば幸いです。

55

テキスト修正

2018/10/08 04:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -222,11 +222,4 @@
222
222
 
223
223
  > ベターな
224
224
 
225
- コードになると思いますし、それが書けてからLodashを使った汎用的なコードを採用することにしても遅くはありません。
226
-
227
-
228
-
229
-
230
- ## 追伸
231
-
232
- 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学ぶことができました。ありがとうございます。Lodashは日常的によく使うので、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、次からは「これをLodashで解決する方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索してみると思います。
225
+ コードになると思いますし、それが書けてからLodashを使った汎用的なコードを採用することにしても遅くはありません。

54

テキスト修正

2018/10/08 02:38

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -175,10 +175,8 @@
175
175
  _.omitBy(objectB, (v, k) => objectA[k] === v)
176
176
  ```
177
177
 
178
- によって、差分のあるプロパティだけを取り出せるとお考えでしたら、 `===` が true なる条件再確認する必要があるのでは? ということです。
178
+ によって、差分のあるプロパティだけを取り出せるとお考えでしたら、 厳密な比較演算子`===` についての理解点検する必要があるのでは? ということです。ですので、
179
179
 
180
- ですので、
181
-
182
180
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
183
181
 
184
182
  のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤとがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきかと思います。

53

テキスト修正

2018/10/07 22:44

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -231,4 +231,4 @@
231
231
 
232
232
  ## 追伸
233
233
 
234
- 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学ました。すので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これをLodashで解決する方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索ると思います。このようにして検索の確度を高めていくことができます。ありがとうございました。
234
+ 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学ぶことができました。ありがとうございま。Lodashは日常的によく使うので、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、次からは「これをLodashで解決する方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索してみると思います。

52

テキスト修正

2018/10/07 22:40

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -156,7 +156,7 @@
156
156
 
157
157
  ## 補足1
158
158
 
159
- 回答に書いたような、確度の高い情報に素早く達することは仕事の上で大事とはいえ、ご質問に
159
+ 回答に書いたような、確度の高い情報に要領よく達することは、業務プログラムを書くときには大事なこはいえ、ご質問に
160
160
 
161
161
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
162
162
 

51

テキスト修正

2018/10/07 22:08

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -231,4 +231,4 @@
231
231
 
232
232
  ## 追伸
233
233
 
234
- 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これを解方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。ありがとうございました。
234
+ 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これをLodashで決する方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。ありがとうございました。

50

テキスト修正

2018/10/07 21:54

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -153,14 +153,11 @@
153
153
 
154
154
  以上参考になれば幸いです。
155
155
 
156
+
156
157
  ## 補足1
157
158
 
158
- この回を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ですので、次、配列やオブジェクトの操作で、「Lodashを使ったうま方法があるのでは?」と思える問題にぶつかっ場合、「これを解く方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度めていくこときます。ありがうござます。
159
+ 回答にいたような、確度高い情報に素早達することは仕事の上大事え、ご質問に
159
160
 
160
- ## 補足2
161
-
162
- とはいえ、ご質問に
163
-
164
161
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
165
162
 
166
163
  と書かれているモヤモヤ(を感じることのできるセンスを維持すること)もまた大事です。
@@ -170,7 +167,7 @@
170
167
 
171
168
  についている回答のようなコードを書くことになり、おそらく JavaScriptの基礎確認に役立つと思います。
172
169
 
173
- ## 補足3
170
+ ## 補足2
174
171
 
175
172
  あらためてterataillerさんのご質問を再読して(老婆心ながら)思うところとしては、ご質問にあるコード
176
173
 
@@ -199,8 +196,15 @@
199
196
 
200
197
  ということです。
201
198
 
202
- そこで、上記を確認するための実践として、オブジェクト一般について比較するコードではなく、ご質問で検討の対象としている、以下の形式
199
+ そこで、以下のページ
203
200
 
201
+ - MDN:[比較演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
202
+ - [開眼!JavaScript](https://www.amazon.co.jp/dp/487311621X) 1.14節「オブジェクトは同値判定に参照を使用」に掲載の[サンプルコード](http://jsfiddle.net/jseja/4UDYr)
203
+ - [JavaScript 忘れがちな === と == の違い](https://qiita.com/PianoScoreJP/items/e43d70ec188c6fed73ed) (PianoScoreJPさん@Qiita)
204
+
205
+
206
+ で説明している基礎知識を確認するための実践として、オブジェクト一般について比較するコードではなく、ご質問で検討の対象としている、以下の形式
207
+
204
208
  ```javascript
205
209
  {
206
210
  id: 整数,
@@ -222,8 +226,9 @@
222
226
 
223
227
  コードになると思いますし、それが書けてからLodashを使った汎用的なコードを採用することにしても遅くはありません。
224
228
 
225
- 最後に、比較演算子の参考サイトをいくつか挙げておきます。
226
229
 
227
- - MDN:[比較演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
228
- - [開眼!JavaScript](https://www.amazon.co.jp/dp/487311621X) 1.14節「オブジェクトは同値判定に参照を使用」に掲載の[サンプルコード](http://jsfiddle.net/jseja/4UDYr)
229
- - [JavaScript 忘れがちな === と == の違い](https://qiita.com/PianoScoreJP/items/e43d70ec188c6fed73ed) (PianoScoreJPさん@Qiita)
230
+
231
+
232
+ ## 追伸
233
+
234
+ 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これを解く方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。ありがとうございました。

49

テキスト修正

2018/10/07 21:38

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -216,7 +216,7 @@
216
216
  updated: 整数(タイムスタンプ),
217
217
  }
218
218
  ```
219
- である2つのオブジェクト objectA と objectB とを比較して、objectBのほうが新しいものであるとして更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、(これは自力で)スクラッチから書いてみるとよいかもしれません。それがまずは次の一歩となる、terataillerさんにとっての
219
+ であることは分かっている2つのオブジェクト objectA と objectB とを比較して、objectBのほうが新しいものであるとして更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、(これは自力で)スクラッチから書いてみるとよいかもしれません。それがまずはterataillerさんにとっての(次の一歩となる、)
220
220
 
221
221
  > ベターな
222
222
 

48

テキスト修正

2018/10/07 21:30

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -155,7 +155,7 @@
155
155
 
156
156
  ## 補足1
157
157
 
158
- 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ありがとうございます。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これを解く方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。
158
+ 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これを解く方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。ありがとうございます。
159
159
 
160
160
  ## 補足2
161
161
 
@@ -178,12 +178,15 @@
178
178
  _.omitBy(objectB, (v, k) => objectA[k] === v)
179
179
  ```
180
180
 
181
- によって、差分のあるプロパティだけを取り出せるとお考えでしたら、 もしかすると、`===` が true になる条件を再確認する必要があるのでは? ということです。ですので、
181
+ によって、差分のあるプロパティだけを取り出せるとお考えでしたら、 `===` が true になる条件を再確認する必要があるのでは? ということです。
182
182
 
183
+ ですので、
184
+
183
185
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
184
186
 
185
- のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤとがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきす。
187
+ のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤとがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきかと思います。
186
188
 
189
+
187
190
  言い換えると、
188
191
 
189
192
  - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながら、どんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、ときに締め切りに追われる限られた開発時間の中で、必要あれば修正も加えて自分の課題解決に使うことができる。
@@ -217,4 +220,10 @@
217
220
 
218
221
  > ベターな
219
222
 
220
- コードになると思いますし、それが書けてからLodashを使った汎用的なコードを採用することにしても遅くはありません。
223
+ コードになると思いますし、それが書けてからLodashを使った汎用的なコードを採用することにしても遅くはありません。
224
+
225
+ 最後に、比較演算子の参考サイトをいくつか挙げておきます。
226
+
227
+ - MDN:[比較演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
228
+ - [開眼!JavaScript](https://www.amazon.co.jp/dp/487311621X) 1.14節「オブジェクトは同値判定に参照を使用」に掲載の[サンプルコード](http://jsfiddle.net/jseja/4UDYr)
229
+ - [JavaScript 忘れがちな === と == の違い](https://qiita.com/PianoScoreJP/items/e43d70ec188c6fed73ed) (PianoScoreJPさん@Qiita)

47

テキスト修正

2018/10/07 21:24

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -172,7 +172,7 @@
172
172
 
173
173
  ## 補足3
174
174
 
175
- あらためてterataillerさんのご質問を再読して思うところとしては、(老婆心ながら)ご質問にあるコード
175
+ あらためてterataillerさんのご質問を再読して(老婆心ながら)思うところとしては、ご質問にあるコード
176
176
 
177
177
  ```javascript
178
178
  _.omitBy(objectB, (v, k) => objectA[k] === v)

46

テキスト修正

2018/10/07 13:12

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -172,21 +172,21 @@
172
172
 
173
173
  ## 補足3
174
174
 
175
- あらためてterataillerさんのご質問を再読して思うところとしては、ご質問にあるコード
175
+ あらためてterataillerさんのご質問を再読して思うところとしては、(老婆心ながら)ご質問にあるコード
176
176
 
177
177
  ```javascript
178
178
  _.omitBy(objectB, (v, k) => objectA[k] === v)
179
179
  ```
180
180
 
181
- によって、(内容に)差分のあるプロパティだけを取り出せるとお考えでしたら、 もしかすると、`===` が true になる条件を再確認する必要があるのでは? ということです。ですので、
181
+ によって、差分のあるプロパティだけを取り出せるとお考えでしたら、 もしかすると、`===` が true になる条件を再確認する必要があるのでは? ということです。ですので、
182
182
 
183
183
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
184
184
 
185
- のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤとがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきところです。
185
+ のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤとがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきです。
186
186
 
187
187
  言い換えると、
188
188
 
189
- - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながら、どんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、締め切りのある開発時間の中で必要修正も加えて自分の課題解決に使うことができる。
189
+ - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながら、どんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、ときに締め切りに追われ限られた開発時間の中で必要あれば修正も加えて自分の課題解決に使うことができる。
190
190
 
191
191
    というのは応用編のスキルであり、それよりも、
192
192
 

45

テキスト修正

2018/10/07 13:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -190,7 +190,7 @@
190
190
 
191
191
    というのは応用編のスキルであり、それよりも、
192
192
 
193
- - `===` で true になる条件を間違えな、自分の検討対象の範囲内にある、特定の形式のオブジェクトを比較するコードを、(Lodashのような便利グッズを使わず、スクラッチから)難なく書ける。
193
+ - `===` で true になる条件う基礎知識を正しく活用して、自分の開発業務の範囲内にある、ある特定の形式のオブジェクトを比較するコードを、(Lodashのような便利グッズを使わず、スクラッチから)難なく書ける。
194
194
 
195
195
    というスキルのほうが、獲得すべき順序として優先度が(かなり)高い。
196
196
 

44

テキスト修正

2018/10/07 13:04

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- オブジェクトや配列に対してちょっと込み入った操作をするときに Lodash を利用するという選択自体は、間違いではありません。
3
+ オブジェクトや配列に対してちょっと込み入った操作をするときに Lodash を利用するという選択自体は、間違いではありません。(実際、私も同じ課題に直面したら、まずは、Lodash に便利なメソッドはないか?と探すと思います。)
4
4
 
5
5
  ただし、ご質問に挙げられている
6
6
 

43

テキスト修正

2018/10/07 12:56

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -217,4 +217,4 @@
217
217
 
218
218
  > ベターな
219
219
 
220
- コードになるのではと思った次第です。
220
+ コードになると思いますし、それが書けてからLodashを使った汎用的なコードを採用ることにしても遅くはありません

42

テキスト修正

2018/10/07 12:36

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -52,7 +52,7 @@
52
52
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
53
53
 
54
54
 
55
- そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私の場合は、という限られた話にはなりますが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
55
+ そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私の場合は、という限られた話にはなりますが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissueに拠り所を求めるパターンが多いです。
56
56
 
57
57
  このご質問の解決策を見つけるときは、lodashを使うというのは筋として悪くないと思うので、
58
58
 

41

テキスト修正

2018/10/07 11:58

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  ```
10
10
 
11
11
  だと、更新のあったプロパティだけを抽出するという期待した動作を満たせないのでは?という懸念があります。
12
- たとえば以下のコード
12
+ たとえば以下の
13
13
 
14
14
  ```javascript
15
15
  const objectA = {
@@ -35,7 +35,7 @@
35
35
  console.log(_.omitBy(objectB, (v, k) => objectA[k] === v));
36
36
  ```
37
37
 
38
- では、 `objectA` と `objectB` とは内容が同じなので、更新のあったプロパティを持つオブジェクトとしては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` が等しくないプロパティとして残ることになり、結果として`_.omitBy`の返すオブジェクトは、以下
38
+ では、 `objectA` と `objectB` とは内容が同じなので、更新のあったプロパティを持つオブジェクトとしては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` が等しくないプロパティとして残ることになり、結果として`_.omitBy`の返すオブジェクトは、以下
39
39
 
40
40
  ```javascript
41
41
  {
@@ -186,7 +186,7 @@
186
186
 
187
187
  言い換えると、
188
188
 
189
- - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながら、どんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、限られた開発時間の中で必要な修正も加えて自分の課題解決に使うことができる。
189
+ - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながら、どんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、締め切りのある開発時間の中で必要な修正も加えて自分の課題解決に使うことができる。
190
190
 
191
191
    というのは応用編のスキルであり、それよりも、
192
192
 

40

テキスト修正

2018/10/07 11:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -172,13 +172,13 @@
172
172
 
173
173
  ## 補足3
174
174
 
175
- あらためてterataillerさんのご質問を再読して思うところとしては、
175
+ あらためてterataillerさんのご質問を再読して思うところとしては、ご質問にあるコード
176
176
 
177
177
  ```javascript
178
178
  _.omitBy(objectB, (v, k) => objectA[k] === v)
179
179
  ```
180
180
 
181
- によって、(内容に)差分のあるプロパティだけを取り出せるとお考えになってしまったのでしたら、 `===` が true になる条件を再確認する必要があるのでは? ということです。ですので、
181
+ によって、(内容に)差分のあるプロパティだけを取り出せるとお考えでしたら、 もしかすると、`===` が true になる条件を再確認する必要があるのでは? ということです。ですので、
182
182
 
183
183
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
184
184
 

39

テキスト修正

2018/10/07 11:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -186,7 +186,7 @@
186
186
 
187
187
  言い換えると、
188
188
 
189
- - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもし、「オブジェクト一般の差分取得する」というような、(いわば)大きなテーマのコードを持ってきて、必要な修正も加えたうえ自分の課題解決に使うことができる。
189
+ - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台として使ったりもしながらどんなオブジェクトにも使える「オブジェクト一般の差分取得」というような、(いわば)大きなテーマのコードを持ってきて、限られた開発時間の中で必要な修正も加え自分の課題解決に使うことができる。
190
190
 
191
191
    というのは応用編のスキルであり、それよりも、
192
192
 

38

テキスト修正

2018/10/07 10:53

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -178,11 +178,11 @@
178
178
  _.omitBy(objectB, (v, k) => objectA[k] === v)
179
179
  ```
180
180
 
181
- によって、(内容に)差分のあるプロパティだけを取り出せるとお考えになってしまったのでしたら、 `===` が true になる条件を再確認する必要があるということです。ですので、
181
+ によって、(内容に)差分のあるプロパティだけを取り出せるとお考えになってしまったのでしたら、 `===` が true になる条件を再確認する必要があるのでは? ということです。ですので、
182
182
 
183
183
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
184
184
 
185
- のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきところです。
185
+ のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきところです。
186
186
 
187
187
  言い換えると、
188
188
 

37

テキスト修正

2018/10/07 09:58

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -186,7 +186,7 @@
186
186
 
187
187
  言い換えると、
188
188
 
189
- - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台して、オブジェクト一般の差分を取得するという、わりと大きテーマのコードを書ける。
189
+ - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台して使ったりもしオブジェクト一般の差分を取得するというような(いば)大きテーマのコードを持ってきて、必要なら修正も加えたうえ自分の課題解決に使うことができる。
190
190
 
191
191
    というのは応用編のスキルであり、それよりも、
192
192
 

36

テキスト修正

2018/10/07 09:50

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -188,12 +188,14 @@
188
188
 
189
189
  - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台にして、オブジェクト一般の差分を取得する(という、わりと大きいテーマの)コードを書ける。
190
190
 
191
- というのは応用編のスキルであり、それよりも、
191
+   というのは応用編のスキルであり、それよりも、
192
192
 
193
193
  - `===` で true になる条件を間違えないで、自分の検討対象の範囲内にある、特定の形式のオブジェクトを比較するコードを、(Lodashのような便利グッズを使わず、スクラッチから)難なく書ける。
194
194
 
195
- というスキルのほうが、獲得すべき順序として優先度が(かなり)高いです
195
+   というスキルのほうが、獲得すべき順序として優先度が(かなり)高い。
196
196
 
197
+ ということです。
198
+
197
199
  そこで、上記を確認するための実践として、オブジェクト一般について比較するコードではなく、ご質問で検討の対象としている、以下の形式
198
200
 
199
201
  ```javascript

35

テキスト修正

2018/10/07 09:42

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  ```
10
10
 
11
11
  だと、更新のあったプロパティだけを抽出するという期待した動作を満たせないのでは?という懸念があります。
12
- 簡単な例だと、たとえば以下のコード
12
+ たとえば以下のコード
13
13
 
14
14
  ```javascript
15
15
  const objectA = {
@@ -35,7 +35,7 @@
35
35
  console.log(_.omitBy(objectB, (v, k) => objectA[k] === v));
36
36
  ```
37
37
 
38
- では、 `objectA` と `objectB` とは内容が同じなので、差分としては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` が等しくないプロパティとして残ることになり、結果として`_.omitBy`の返すオブジェクトは、以下
38
+ では、 `objectA` と `objectB` とは内容が同じなので、更新のあったプロパティを持つオブジェクトとしては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` が等しくないプロパティとして残ることになり、結果として`_.omitBy`の返すオブジェクトは、以下
39
39
 
40
40
  ```javascript
41
41
  {

34

テキスト修正

2018/10/07 09:36

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -190,7 +190,7 @@
190
190
 
191
191
  というのは応用編のスキルであり、それよりも、
192
192
 
193
- - `===` で true になる条件を間違えないで、自分の検討対象の範囲内にある、特定の形式のオブジェクトを比較するコードを難なく書ける。
193
+ - `===` で true になる条件を間違えないで、自分の検討対象の範囲内にある、特定の形式のオブジェクトを比較するコードを、(Lodashのような便利グッズを使わず、スクラッチから)難なく書ける。
194
194
 
195
195
  というスキルのほうが、獲得すべき順序として優先度が(かなり)高いです。
196
196
 

33

テキスト修正

2018/10/07 09:29

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  _.omitBy(objectB, (v, k) => objectA[k] === v);
9
9
  ```
10
10
 
11
- だと、更新のあったプロパティだけを抽出するという期待した動作を満たせないです。
11
+ だと、更新のあったプロパティだけを抽出するという期待した動作を満たせないは?という懸念があります。
12
12
  簡単な例だと、たとえば以下のコード
13
13
 
14
14
  ```javascript

32

テキスト修正

2018/10/07 09:25

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -211,7 +211,7 @@
211
211
  updated: 整数(タイムスタンプ),
212
212
  }
213
213
  ```
214
- である2つのオブジェクト objectA と objectB とを比較して、objectBのほうが新しいものであるとして更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、(これは自力で)スクラッチから書いてみるとよいかもしれません。それがまずは次の一歩となる、
214
+ である2つのオブジェクト objectA と objectB とを比較して、objectBのほうが新しいものであるとして更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、(これは自力で)スクラッチから書いてみるとよいかもしれません。それがまずは次の一歩となる、terataillerさんにとっての
215
215
 
216
216
  > ベターな
217
217
 

31

テキスト修正

2018/10/07 09:10

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,15 +1,15 @@
1
1
  こんにちは。
2
2
 
3
- まず、オブジェクトや配列に対してちょっと込み入った操作をするときに Lodash を利用するという選択自体は、間違ってなと思い
3
+ オブジェクトや配列に対してちょっと込み入った操作をするときに Lodash を利用するという選択自体は、間違いではありせん
4
4
 
5
- ただ、ご質問に挙げられている
5
+ ただ、ご質問に挙げられている
6
6
 
7
7
  ```javascript
8
8
  _.omitBy(objectB, (v, k) => objectA[k] === v);
9
9
  ```
10
10
 
11
- では差分だけを正しく抽出できず、期待した動作をしてくれない場合があります。
11
+ だと更新のあったプロパティだけを抽出するという期待した動作を満たせないす。
12
- たとえば以下のコード
12
+ 簡単な例だと、たとえば以下のコード
13
13
 
14
14
  ```javascript
15
15
  const objectA = {
@@ -47,7 +47,7 @@
47
47
  }
48
48
  ```
49
49
 
50
- であることが、console.logの出力で確認できると思います。これの検証用のサンプルを以下に上げましたので、ご確認ください。
50
+ であることが、console.logの出力で確認できます。これの検証用のサンプルを以下に上げましたので、ご確認ください。
51
51
 
52
52
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
53
53
 

30

テキスト修正

2018/10/07 09:07

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -211,7 +211,7 @@
211
211
  updated: 整数(タイムスタンプ),
212
212
  }
213
213
  ```
214
- である2つのオブジェクト objectA と objectB とを比較して、更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、スクラッチから書いてみるとよいかもしれません。それがまずは次の一歩となる、
214
+ である2つのオブジェクト objectA と objectB とを比較して、objectBのほうが新しいものであるとして更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、(これは自力で)スクラッチから書いてみるとよいかもしれません。それがまずは次の一歩となる、
215
215
 
216
216
  > ベターな
217
217
 

29

テキスト修正

2018/10/07 08:49

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -211,4 +211,8 @@
211
211
  updated: 整数(タイムスタンプ),
212
212
  }
213
213
  ```
214
- である2つのオブジェクト objectA と objectB とを比較して、更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、スクラッチから書いてみるとよいかもしれません。それがまずは次の一歩となるベターなコードになるのではと思いました。
214
+ である2つのオブジェクト objectA と objectB とを比較して、更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、スクラッチから書いてみるとよいかもしれません。それがまずは次の一歩となる
215
+
216
+ > ベターな
217
+
218
+ コードになるのではと思った次第です。

28

テキスト修正

2018/10/07 08:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -190,7 +190,7 @@
190
190
 
191
191
  というのは応用編のスキルであり、それよりも、
192
192
 
193
- - `===` で true になる条件を間違えないで、自分の検討対象内にある特定の形式のオブジェクトを比較するコードを難なく書ける。
193
+ - `===` で true になる条件を間違えないで、自分の検討対象の範囲内にある特定の形式のオブジェクトを比較するコードを難なく書ける。
194
194
 
195
195
  というスキルのほうが、獲得すべき順序として優先度が(かなり)高いです。
196
196
 

27

テキスト修正

2018/10/07 08:41

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -211,4 +211,4 @@
211
211
  updated: 整数(タイムスタンプ),
212
212
  }
213
213
  ```
214
- である2つのオブジェクト objectA と objectB とを比較して、更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、スクラッチから書いてみるとよいかもしれません。それが、まずは次の一歩となるベターなコードになるのではと考え次第です
214
+ である2つのオブジェクト objectA と objectB とを比較して、更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、スクラッチから書いてみるとよいかもしれません。それが、まずは次の一歩となるベターなコードになるのではと思いました。

26

テキスト修正

2018/10/07 08:34

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -182,7 +182,8 @@
182
182
 
183
183
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
184
184
 
185
- のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。
185
+ のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。モヤモヤにも良いモヤモヤと悪いモヤモヤがあって、 `===`の理解不足によるモヤモヤは悪いモヤモヤなので、すぐに解消すべきところです。
186
+
186
187
  言い換えると、
187
188
 
188
189
  - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台にして、オブジェクト一般の差分を取得する(という、わりと大きいテーマの)コードを書ける。
@@ -210,4 +211,4 @@
210
211
  updated: 整数(タイムスタンプ),
211
212
  }
212
213
  ```
213
- である2つのオブジェクト objectA と objectB とを比較して、更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、スクラッチから書いてみるとよいかもしれません。
214
+ である2つのオブジェクト objectA と objectB とを比較して、更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、スクラッチから書いてみるとよいかもしれません。それが、まずは次の一歩となるベターなコードになるのではと考えた次第です。

25

テキスト修正

2018/10/07 08:32

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -183,8 +183,18 @@
183
183
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
184
184
 
185
185
  のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。
186
- ですので、上記を確認するための実践として、オブジェクト一般につて比較すコードではなく、ご質問で検討の対象している以下の形式
186
+ 換えると、
187
187
 
188
+ - Lodash (なり、他の便利な何か)を使って、必要な情報に効率よくリーチして、ときには他の優れたプログラマーの成果物を土台にして、オブジェクト一般の差分を取得する(という、わりと大きいテーマの)コードを書ける。
189
+
190
+ というのは応用編のスキルであり、それよりも、
191
+
192
+ - `===` で true になる条件を間違えないで、自分の検討の対象内にある特定の形式のオブジェクトを比較するコードを難なく書ける。
193
+
194
+ というスキルのほうが、獲得すべき順序として優先度が(かなり)高いです。
195
+
196
+ そこで、上記を確認するための実践として、オブジェクト一般について比較するコードではなく、ご質問で検討の対象としている、以下の形式
197
+
188
198
  ```javascript
189
199
  {
190
200
  id: 整数,

24

テキスト修正

2018/10/07 08:16

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -153,16 +153,12 @@
153
153
 
154
154
  以上参考になれば幸いです。
155
155
 
156
- ---
156
+ ## 補足1
157
157
 
158
- **補足1**
159
-
160
158
  今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ありがとうございます。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これを解く方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。
161
159
 
162
- ---
160
+ ## 補足2
163
161
 
164
- **補足2**
165
-
166
162
  とはいえ、ご質問に
167
163
 
168
164
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
@@ -172,4 +168,36 @@
172
168
 
173
169
  - [Generic deep diff between two objects](https://stackoverflow.com/questions/8572826/generic-deep-diff-between-two-objects)
174
170
 
175
- についている回答のようなコードを書くことになり、おそらく JavaScriptの基礎確認に役立つと思います。
171
+ についている回答のようなコードを書くことになり、おそらく JavaScriptの基礎確認に役立つと思います。
172
+
173
+ ## 補足3
174
+
175
+ あらためてterataillerさんのご質問を再読して思うところとしては、
176
+
177
+ ```javascript
178
+ _.omitBy(objectB, (v, k) => objectA[k] === v)
179
+ ```
180
+
181
+ によって、(内容に)差分のあるプロパティだけを取り出せるとお考えになってしまったのでしたら、 `===` が true になる条件を再確認する必要がある、ということです。ですので、
182
+
183
+ > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
184
+
185
+ のモヤモヤの原因の一端は、`===` が true になる条件の理解不足にあるかもしれません。
186
+ ですので、上記を確認するための実践として、オブジェクト一般について比較するコードではなく、ご質問で検討の対象としている、以下の形式
187
+
188
+ ```javascript
189
+ {
190
+ id: 整数,
191
+ description: 文字列,
192
+ images: 文字列を要素とする配列,
193
+ metadata: {
194
+ product_id: 整数,
195
+ options: 文字列を要素とする配列
196
+ },
197
+ name: 文字列,
198
+ active: ブール値,
199
+ created: 整数(タイムスタンプ),
200
+ updated: 整数(タイムスタンプ),
201
+ }
202
+ ```
203
+ である2つのオブジェクト objectA と objectB とを比較して、更新されたプロパティだけを集めたオブジェクトを作る関数なりメソッドなりを、スクラッチから書いてみるとよいかもしれません。

23

テキスト修正

2018/10/07 07:28

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -47,7 +47,7 @@
47
47
  }
48
48
  ```
49
49
 
50
- のようにconsole.logで表示されでしょう上記の検証用のサンプルを以下に上げましたので、ご確認ください。
50
+ であることが、console.logの出力確認できると思いますこれの検証用のサンプルを以下に上げましたので、ご確認ください。
51
51
 
52
52
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
53
53
 

22

テキスト修正

2018/10/07 04:12

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -167,7 +167,7 @@
167
167
 
168
168
  > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
169
169
 
170
- と書かれているモヤモヤ(を感じることのできるセンスを維持すること)もまた大事です。
170
+ と書かれているモヤモヤ(を感じることのできるセンスを維持すること)もまた大事です。
171
171
  ですので、一度、ご自身でオブジェクトの内容比較のコードを書いてみるのもよいかもしれません。そうすると、以下の質問
172
172
 
173
173
  - [Generic deep diff between two objects](https://stackoverflow.com/questions/8572826/generic-deep-diff-between-two-objects)

21

テキスト修正

2018/10/07 04:10

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -8,8 +8,7 @@
8
8
  _.omitBy(objectB, (v, k) => objectA[k] === v);
9
9
  ```
10
10
 
11
- では、差分だけを正しく抽出してくれないので、期待した動作をしてくれないと思います。
11
+ では、差分だけを正しく抽出できず、期待した動作をしてくれない場合があります。
12
-
13
12
  たとえば以下のコード
14
13
 
15
14
  ```javascript
@@ -36,7 +35,7 @@
36
35
  console.log(_.omitBy(objectB, (v, k) => objectA[k] === v));
37
36
  ```
38
37
 
39
- では、 `objectA` と `objectB` とは内容が同じなので、差分としては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` プロパティが等しくないプロパティとしてピックアップされて、`_.omitBy`の返すオブジェクトとして、以下
38
+ では、 `objectA` と `objectB` とは内容が同じなので、差分としては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` が等しくないプロパティとして残ることになり結果として`_.omitBy`の返すオブジェクト、以下
40
39
 
41
40
  ```javascript
42
41
  {
@@ -48,7 +47,7 @@
48
47
  }
49
48
  ```
50
49
 
51
- が console に表示されることでしょう。上記の検証用のサンプルを以下に上げましたので、ご確認ください。
50
+ のようconsole.logで表示されることでしょう。上記の検証用のサンプルを以下に上げましたので、ご確認ください。
52
51
 
53
52
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
54
53
 

20

テキスト修正

2018/10/07 04:05

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -53,7 +53,7 @@
53
53
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
54
54
 
55
55
 
56
- そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに私の場合、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
56
+ そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに、あくまで私の場合という限られた話にはなりすが、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
57
57
 
58
58
  このご質問の解決策を見つけるときは、lodashを使うというのは筋として悪くないと思うので、
59
59
 
@@ -68,7 +68,7 @@
68
68
 
69
69
 
70
70
  を拝借するのがよいと思いました。
71
- ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶのは、個人の判断に委ねられるところなので、別の投稿や回答のほうが使えると判断される方もいらっしゃることでしょう。)
71
+ (ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶのは、個人の判断に委ねられるところなので、別の投稿や回答のほうが使えると判断される方もいらっしゃることでしょう。)
72
72
 
73
73
  上記を経て作成したものが以下です。
74
74
 

19

テキスト修正

2018/10/07 03:49

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -156,6 +156,21 @@
156
156
 
157
157
  ---
158
158
 
159
- 補足
159
+ **補足1**
160
160
 
161
- 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ありがとうございます。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これを解く方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。
161
+ 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ありがとうございます。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これを解く方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。
162
+
163
+ ---
164
+
165
+ **補足2**
166
+
167
+ とはいえ、ご質問に
168
+
169
+ > 中身がブラックボックなので、なんか良くわからないけど出来たという感覚
170
+
171
+ と書かれているモヤモヤ感(を感じることのできるセンスを維持すること)もまた大事です。
172
+ ですので、一度、ご自身でオブジェクトの内容比較のコードを書いてみるのもよいかもしれません。そうすると、以下の質問
173
+
174
+ - [Generic deep diff between two objects](https://stackoverflow.com/questions/8572826/generic-deep-diff-between-two-objects)
175
+
176
+ についている回答のようなコードを書くことになり、おそらく JavaScriptの基礎確認に役立つと思います。

18

テキスト修正

2018/10/07 02:38

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -53,7 +53,7 @@
53
53
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
54
54
 
55
55
 
56
- そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに私の場合、まずは適切な英文でググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
56
+ そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに私の場合、まずは適切な**(日本語を含まない)英文で**ググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
57
57
 
58
58
  このご質問の解決策を見つけるときは、lodashを使うというのは筋として悪くないと思うので、
59
59
 

17

テキスト修正

2018/10/07 02:14

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
  が console に表示されることでしょう。上記の検証用のサンプルを以下に上げましたので、ご確認ください。
52
52
 
53
- - [https://jsfiddle.net/jun68ykt/nhom4uw8/5/](https://jsfiddle.net/jun68ykt/nhom4uw8/5/)
53
+ - [https://jsfiddle.net/jun68ykt/nhom4uw8/7/](https://jsfiddle.net/jun68ykt/nhom4uw8/7/)
54
54
 
55
55
 
56
56
  そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに私の場合、まずは適切な英文でググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
@@ -136,12 +136,12 @@
136
136
 
137
137
  上記のコードを以下に上げましたのでお試しください。
138
138
 
139
- - [https://jsfiddle.net/jun68ykt/g0zctujb/12/](https://jsfiddle.net/jun68ykt/g0zctujb/12/)
139
+ - [https://jsfiddle.net/jun68ykt/g0zctujb/14/](https://jsfiddle.net/jun68ykt/g0zctujb/14/)
140
140
 
141
141
 
142
142
  また、上記で使っている差分抽出コードだと、objectAとobjectBの内容が同じときは、差分のオブジェクトは以下
143
143
 
144
- - [https://jsfiddle.net/jun68ykt/Lpwe0952/1/](https://jsfiddle.net/jun68ykt/Lpwe0952/1/)
144
+ - [https://jsfiddle.net/jun68ykt/Lpwe0952/3/](https://jsfiddle.net/jun68ykt/Lpwe0952/3/)
145
145
 
146
146
 
147
147
  のとおり空オブジェクトになります。

16

テキスト修正

2018/10/07 02:03

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -68,7 +68,7 @@
68
68
 
69
69
 
70
70
  を拝借するのがよいと思いました。
71
- (※ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶところは、個人の判断に委ねられるところなので、別の投稿のほうが使えると判断される方もいらっしゃることでしょう。)
71
+ (※ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶは、個人の判断に委ねられるところなので、別の投稿や回答のほうが使えると判断される方もいらっしゃることでしょう。)
72
72
 
73
73
  上記を経て作成したものが以下です。
74
74
 

15

テキスト修正

2018/10/07 01:58

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -152,4 +152,10 @@
152
152
  「業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。」
153
153
  と書きました。その観点でいうと、(1)から(4)のステップで大事なのは、 まずは(1)でいかに適切な英語で検索できるかだと思ってます。ですので、なるべく、stackoverflow のタイトルや、使いたいモジュールの発信元である GitHubレポジトリの issueタイトルにヒットしそうな検索ワードをあれこれと試します。
154
154
 
155
- 以上参考になれば幸いです。
155
+ 以上参考になれば幸いです。
156
+
157
+ ---
158
+
159
+ 補足
160
+
161
+ 今回この回答を書くことを通じて、恥ずかしながら私も Adam Boduchさんの存在を初めて知ることができ、ひとつ学べました。ありがとうございます。ですので、次に、配列やオブジェクトの操作で、「Lodashを使ったうまい方法があるのでは?」と思える問題にぶつかった場合、「これを解く方法について Adam Boduchさんが、どこかで何か言ってないか?」というのも検索すると思います。このようにして検索の確度を高めていくことができます。

14

テキスト修正

2018/10/07 01:26

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- まず、オブジェクトや配列に対してちょっと込み入った操作をするために Lodash を利用しようという選択にたどりついたこと自体は、間違ってないと思います。
3
+ まず、オブジェクトや配列に対してちょっと込み入った操作をするときに Lodash を利用するという選択自体は、間違ってないと思います。
4
4
 
5
5
  ただ、ご質問に挙げられている
6
6
 

13

テキスト修正

2018/10/07 01:11

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -122,7 +122,7 @@
122
122
 
123
123
  console.log(diffProps);
124
124
 
125
- // 更新されたプロパティのobjectBでの値のみを持つオブジェクトを作成
125
+ // 値が更新されたプロパティと、それらのobjectBでの値を持つオブジェクトを作成
126
126
  const diffObj = diffProps.reduce((obj, prop) => {
127
127
  obj[prop] = objectB[prop];
128
128
  return obj;
@@ -136,7 +136,7 @@
136
136
 
137
137
  上記のコードを以下に上げましたのでお試しください。
138
138
 
139
- - [https://jsfiddle.net/jun68ykt/g0zctujb/11/](https://jsfiddle.net/jun68ykt/g0zctujb/11/)
139
+ - [https://jsfiddle.net/jun68ykt/g0zctujb/12/](https://jsfiddle.net/jun68ykt/g0zctujb/12/)
140
140
 
141
141
 
142
142
  また、上記で使っている差分抽出コードだと、objectAとobjectBの内容が同じときは、差分のオブジェクトは以下

12

テキスト修正

2018/10/07 01:08

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
File without changes

11

テキスト修正

2018/10/07 01:02

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -36,7 +36,7 @@
36
36
  console.log(_.omitBy(objectB, (v, k) => objectA[k] === v));
37
37
  ```
38
38
 
39
- では、 `objectA` と `objectB` とは内容が同じなので、差分としては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` プロパティが等しくないプロパティとしてピックアップされて、以下が console に表示されるこょう。
39
+ では、 `objectA` と `objectB` とは内容が同じなので、差分としては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` プロパティが等しくないプロパティとしてピックアップされて、`_.omitBy`の返すオブジェクトとして、以下
40
40
 
41
41
  ```javascript
42
42
  {
@@ -48,7 +48,7 @@
48
48
  }
49
49
  ```
50
50
 
51
- 上記の検証用のサンプルを以下に上げましたので、ご確認ください。
51
+ が console に表示されることでしょう。上記の検証用のサンプルを以下に上げましたので、ご確認ください。
52
52
 
53
53
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/5/](https://jsfiddle.net/jun68ykt/nhom4uw8/5/)
54
54
 
@@ -63,7 +63,7 @@
63
63
 
64
64
  (3) stackoverflowの投稿が出てきたときは、いくつかの回答の中でどれが使えそうか当たりをつける。
65
65
   
66
- (4) 今回のご質問の場合、 [Adam Boduch](https://www.amazon.com/Adam-Boduch/e/B005K03U8O) さんによる回答:
66
+ (4) 今回のご質問の場合、[Lo-Dash Essentials](https://www.amazon.com/gp/product/B00SVBFBK4/) という著書も書いている、 [Adam Boduch](https://www.amazon.com/Adam-Boduch/e/B005K03U8O) さんによる回答:
67
67
  - [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152)
68
68
 
69
69
 

10

テキスト修正

2018/10/07 01:02

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -122,7 +122,7 @@
122
122
 
123
123
  console.log(diffProps);
124
124
 
125
- // 更新されたプロパティの値のみを持つオブジェクトを作成
125
+ // 更新されたプロパティのobjectBでの値のみを持つオブジェクトを作成
126
126
  const diffObj = diffProps.reduce((obj, prop) => {
127
127
  obj[prop] = objectB[prop];
128
128
  return obj;
@@ -136,7 +136,7 @@
136
136
 
137
137
  上記のコードを以下に上げましたのでお試しください。
138
138
 
139
- - [https://jsfiddle.net/jun68ykt/g0zctujb/10/](https://jsfiddle.net/jun68ykt/g0zctujb/10/)
139
+ - [https://jsfiddle.net/jun68ykt/g0zctujb/11/](https://jsfiddle.net/jun68ykt/g0zctujb/11/)
140
140
 
141
141
 
142
142
  また、上記で使っている差分抽出コードだと、objectAとobjectBの内容が同じときは、差分のオブジェクトは以下

9

テキスト修正

2018/10/07 00:56

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -63,7 +63,11 @@
63
63
 
64
64
  (3) stackoverflowの投稿が出てきたときは、いくつかの回答の中でどれが使えそうか当たりをつける。
65
65
   
66
+ (4) 今回のご質問の場合、 [Adam Boduch](https://www.amazon.com/Adam-Boduch/e/B005K03U8O) さんによる回答:
66
- (4) 今回のご質問の場合、 [Adam Boduch](https://www.amazon.com/Adam-Boduch/e/B005K03U8O) さんによる回答: [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152) を拝借するのがよいと思いました。
67
+ - [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152)
68
+
69
+
70
+ を拝借するのがよいと思いました。
67
71
  (※ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶところは、個人の判断に委ねられるところなので、別の投稿のほうが使えると判断される方もいらっしゃることでしょう。)
68
72
 
69
73
  上記を経て作成したものが以下です。

8

テキスト修正

2018/10/07 00:51

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -53,7 +53,7 @@
53
53
  - [https://jsfiddle.net/jun68ykt/nhom4uw8/5/](https://jsfiddle.net/jun68ykt/nhom4uw8/5/)
54
54
 
55
55
 
56
- そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに私の場合、まずは適切な英文でググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
56
+ そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに私の場合、まずは適切な英文でググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
57
57
 
58
58
  このご質問の解決策を見つけるときは、lodashを使うというのは筋として悪くないと思うので、
59
59
 
@@ -144,6 +144,8 @@
144
144
 
145
145
 
146
146
 
147
- 先ほど、「業務上でこの種の問題に遭遇した場合、すでに誰かが作ってくれた、より確からしい実装に早くたどりつく必要があります」と書きましたが、その観点でいうと、(1)から(4)のステップで大事なのは、 まずは(1)でいかに適切な英語で検索できるかだと思ってます。ですので、なるべく、stackoverflow のタイトルや、使いたいモジュールの発信元である GitHubレポジトリの issueタイトルにヒットしそうな検索ワードをあれこれと試します。
147
+ 先ほど、
148
+ 「業務上でこの種の問題に遭遇した場合、すでに(優れたプログラマーである)誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。」
149
+ と書きました。その観点でいうと、(1)から(4)のステップで大事なのは、 まずは(1)でいかに適切な英語で検索できるかだと思ってます。ですので、なるべく、stackoverflow のタイトルや、使いたいモジュールの発信元である GitHubレポジトリの issueタイトルにヒットしそうな検索ワードをあれこれと試します。
148
150
 
149
151
  以上参考になれば幸いです。

7

テキスト修正

2018/10/07 00:48

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -63,7 +63,7 @@
63
63
 
64
64
  (3) stackoverflowの投稿が出てきたときは、いくつかの回答の中でどれが使えそうか当たりをつける。
65
65
   
66
- (4) 今回のご質問の場合、 [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152) を使うのが課題解決につながると思いました。
66
+ (4) 今回のご質問の場合、 [Adam Boduch](https://www.amazon.com/Adam-Boduch/e/B005K03U8O) さんによる回答: [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152) を拝借するのがよいと思いました。
67
67
  (※ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶところは、個人の判断に委ねられるところなので、別の投稿のほうが使えると判断される方もいらっしゃることでしょう。)
68
68
 
69
69
  上記を経て作成したものが以下です。

6

テキスト修正

2018/10/07 00:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -144,6 +144,6 @@
144
144
 
145
145
 
146
146
 
147
- 先にいた(1)から(4)のステップで大事なのは、 まずは(1)でいかに適切な英語で検索できるかだと思ってます。ですので、なるべく、stackoverflow のタイトルや、使いたいモジュールの発信元である GitHubレポジトリの issueタイトルになっていそうなもの考えます。
147
+ ほど、「業務上でこの種の問題遭遇した場合、すでに誰かが作ってくれた、より確からし実装に早くどりつく必要があります」と書きましたが、その観点でいうと、(1)から(4)のステップで大事なのは、 まずは(1)でいかに適切な英語で検索できるかだと思ってます。ですので、なるべく、stackoverflow のタイトルや、使いたいモジュールの発信元である GitHubレポジトリの issueタイトルにヒットしそうな検索ワードあれこれと試します。
148
148
 
149
149
  以上参考になれば幸いです。

5

テキスト修正

2018/10/07 00:38

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -36,7 +36,7 @@
36
36
  console.log(_.omitBy(objectB, (v, k) => objectA[k] === v));
37
37
  ```
38
38
 
39
- では、 `objectA` と `objectB` とは内容が同じなので、差分としては空オブジェクト `{}` が返ってきて欲しいところですが、上記では、`images` プロパティが等しくないプロパティとしてピックアップされて、以下が console に表示されることでしょう。
39
+ では、 `objectA` と `objectB` とは内容が同じなので、差分としては空オブジェクト `{}` が返ってきて欲しいところですが、上記を実行すると `images` プロパティが等しくないプロパティとしてピックアップされて、以下が console に表示されることでしょう。
40
40
 
41
41
  ```javascript
42
42
  {

4

テキスト修正

2018/10/07 00:34

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -63,7 +63,8 @@
63
63
 
64
64
  (3) stackoverflowの投稿が出てきたときは、いくつかの回答の中でどれが使えそうか当たりをつける。
65
65
   
66
- (4) 今回のご質問の場合、 [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152) を使うのが課題解決につながると思いました。(※ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶところは、個人の判断に委ねられるところなので、別の回答のほうが使えると判断される方もいることでしょう。)
66
+ (4) 今回のご質問の場合、 [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152) を使うのが課題解決につながると思いました。
67
+ (※ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?を選ぶところは、個人の判断に委ねられるところなので、別の投稿のほうが使えると判断される方もいらっしゃることでしょう。)
67
68
 
68
69
  上記を経て作成したものが以下です。
69
70
 

3

テキスト修正

2018/10/07 00:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -57,13 +57,13 @@
57
57
 
58
58
  このご質問の解決策を見つけるときは、lodashを使うというのは筋として悪くないと思うので、
59
59
 
60
- (1) まずは `"lodash defference between two objects"` で[グーグル検索](https://www.google.co.jp/search?q=lodash+defference+between+two+objects)
60
+ (1) まずは `"lodash difference between two objects"` で[グーグル検索](https://www.google.co.jp/search?q=lodash+ difference +between+two+objects)
61
61
 
62
- (2) 検索結果で出てきた一番上 [How to do a deep comparison between 2 objects with lodash?](https://stackoverflow.com/questions/31683075/how-to-do-a-deep-comparison-between-2-objects-with-lodash)をざっと読む。
62
+ (2) 検索結果で上位に出てきたのをざっと読む。
63
63
 
64
- (3) いくつかの回答の中でどれが使えそうか当たりをつける。
64
+ (3) stackoverflowの投稿が出てきたときは、いくつかの回答の中でどれが使えそうか当たりをつける。
65
65
   
66
- (4) 今回のご質問の場合、 [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152) 使えそう。これコードを書てみる。
66
+ (4) 今回のご質問の場合、 [https://stackoverflow.com/a/31686152](https://stackoverflow.com/a/31686152) 使うのが課題解決につながると思いました(※ただし検索結果として出てきた、どの投稿あるいは回答が一番使えるか?選ぶところは、個人の判断委ねられるところなので、別の回答のほうが使えると判断される方もいることでしょう
67
67
 
68
68
  上記を経て作成したものが以下です。
69
69
 
@@ -143,6 +143,6 @@
143
143
 
144
144
 
145
145
 
146
- 先に書いた(1)から(4)のステップで大事なのは、 (1) でいかに適切な英語で検索できるかす。ですので、なるべく、stackoverflow のタイトルや、使いたいモジュールの発信元である GitHubレポジトリの issueタイトルになっていそうなものを考えます。
146
+ 先に書いた(1)から(4)のステップで大事なのは、 まずは(1)でいかに適切な英語で検索できるかだと思ってます。ですので、なるべく、stackoverflow のタイトルや、使いたいモジュールの発信元である GitHubレポジトリの issueタイトルになっていそうなものを考えます。
147
147
 
148
148
  以上参考になれば幸いです。

2

テキスト修正

2018/10/07 00:17

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -57,7 +57,7 @@
57
57
 
58
58
  このご質問の解決策を見つけるときは、lodashを使うというのは筋として悪くないと思うので、
59
59
 
60
- (1) まずは `"lodash defference betwenn two objects"` で[グーグル検索](https://www.google.co.jp/search?q=lodash+defference+betwenn+two+objects)
60
+ (1) まずは `"lodash defference between two objects"` で[グーグル検索](https://www.google.co.jp/search?q=lodash+defference+between+two+objects)
61
61
 
62
62
  (2) 検索結果で出てきた一番上の [How to do a deep comparison between 2 objects with lodash?](https://stackoverflow.com/questions/31683075/how-to-do-a-deep-comparison-between-2-objects-with-lodash)をざっと読む。
63
63
 

1

テキスト修正

2018/10/07 00:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -55,7 +55,7 @@
55
55
 
56
56
  そこでどうするかですが、プログラミングの勉強としてならば、オブジェクトの内容を比較するコードを(再帰を使ってみるなどしながら)スクラッチから書くのもよいと思いますが、業務上でこの種の問題に遭遇した場合、すでに誰かが作ってくれた、より確からしい実装に早くたどりつく必要がありますね。そういうときに私の場合、まずは適切な英文でググってからの stackoverflow または、使うモジュールの発信元であるGitHubレポジトリのissue頼みというパターンが多いです。
57
57
 
58
- この問題だったら、lodashを使うというのは筋として悪くないと思うので、
58
+ このご質の解決策を見つけるときは、lodashを使うというのは筋として悪くないと思うので、
59
59
 
60
60
  (1) まずは `"lodash defference betwenn two objects"` で[グーグル検索](https://www.google.co.jp/search?q=lodash+defference+betwenn+two+objects)
61
61