回答編集履歴
2
注意文を追加
answer
CHANGED
@@ -23,15 +23,18 @@
|
|
23
23
|
|
24
24
|
---
|
25
25
|
|
26
|
-
コードのテクニックで解決するならば、
|
27
|
-
|
26
|
+
毎回`(((obj.parent || {}).apple || {}).jp || null)`とか書くと読みづらくて仕方ないですね。
|
28
|
-
[Lodashのget](https://lodash.com/docs/4.17.15#get)といった解決策があります。
|
29
27
|
|
28
|
+
ES5でも何とか出来ます。
|
29
|
+
[Ramda.jsのpath](https://ramdajs.com/docs/#path)や、[Lodashのget](https://lodash.com/docs/4.17.15#get)といった解決策があります。
|
30
|
+
|
30
31
|
オブジェクトのキーは別にキー名の一部として`.`を所持することは禁止されていないはずですが、
|
31
32
|
JSでプロパティをチェーンする場合は`A.B.C`と書きたいのでくっそ邪魔ですね。
|
32
33
|
なので文字列の`.`にしたり、配列を利用して再帰で取りに行く関数を実装すると良いでしょう。
|
33
34
|
|
34
35
|
コードにするとこんな感じ
|
36
|
+
ただまぁ、LodashやRamda.jsといったライブラリの方がきちんとテストされているので、
|
37
|
+
実際に導入するならライブラリを利用することをオススメします。
|
35
38
|
|
36
39
|
```js
|
37
40
|
var obj = {
|
1
ちょっとだけ修正
answer
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
|
30
30
|
オブジェクトのキーは別にキー名の一部として`.`を所持することは禁止されていないはずですが、
|
31
31
|
JSでプロパティをチェーンする場合は`A.B.C`と書きたいのでくっそ邪魔ですね。
|
32
|
-
なので文字列の`.`にしたり、配列を利用して再
|
32
|
+
なので文字列の`.`にしたり、配列を利用して再帰で取りに行く関数を実装すると良いでしょう。
|
33
33
|
|
34
34
|
コードにするとこんな感じ
|
35
35
|
|
@@ -46,11 +46,11 @@
|
|
46
46
|
|
47
47
|
const get = (obj, key) => {
|
48
48
|
if (key == '') return obj; // 正常終了
|
49
|
-
if (
|
49
|
+
if (obj == null) return obj; // 存在しないキー
|
50
50
|
const keys = key.split('.');
|
51
51
|
return get(obj[keys[0]], keys.slice(1).join('.'));
|
52
52
|
}
|
53
53
|
|
54
54
|
console.log(get(obj, 'parent.apple.jp')); // "りんご"
|
55
|
-
console.log(get(obj, 'parent.banana.jp')); //
|
55
|
+
console.log(get(obj, 'parent.banana.jp')); // undefined
|
56
56
|
```
|