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

回答編集履歴

1

コメントで受けた質問に対する追記回答

2019/07/08 23:14

投稿

thyda.eiqau
thyda.eiqau

スコア2982

answer CHANGED
@@ -38,4 +38,65 @@
38
38
  console.log('All contents have loaded.');
39
39
  }
40
40
  }
41
- ```
41
+ ```
42
+
43
+ ----
44
+ 以下、コメントを受けて追記します。 (コメントに対するコメントではコードブロックが使用できないため)
45
+ Jul 9, 2019 08:03 AM
46
+ > loadedFlagState = {
47
+ 'audio01':'false',
48
+ 'audio02':'false',
49
+ 'audio03':'false',
50
+ 'audio04':'false',
51
+ 'audio05':'false'
52
+ }というようなオブジェクトを生成しているという理解で合っていますでしょうか?
53
+
54
+ はい、概ねあっていますが、true/falseは文字列ではないのでシングルクォートでは囲みません。生成している Objectは次のとおりです。
55
+ ```js
56
+ loadedFlagState = {
57
+ 'audio01': false,
58
+ 'audio02': false,
59
+ 'audio03': false,
60
+ 'audio04': false,
61
+ 'audio05': false
62
+ }
63
+ ```
64
+
65
+ > 下記の部分はどういった状態の要素を意味しているのでしょうか?
66
+ Object.keys(loadedFlagState).filter(key => loadedFlagState[key])
67
+
68
+ 詳細は1つ1つMDMなどを参照していただきたいですが、
69
+ `Object.keys(obj)` は `obj` が持つキーを配列で取得するメソッドで、今回は `['audio01', 'audio02' ... 'audio05']` が得られます。
70
+
71
+ `Array.prototype.filter(callback(element, index, array))` は配列に条件を指定してフィルターを掛けるメソッドで、条件をcallbackで指定します。アロー関数で記載していますが省略せずに書くと、
72
+ ```js
73
+ [
74
+ 'audio01',
75
+ 'audio02',
76
+ 'audio03',
77
+ 'audio04',
78
+ 'audio05'
79
+ ].filter(function(key) {
80
+ return loadedFlagState[key];
81
+ });
82
+ ```
83
+ になります。たとえば `loadedFlagState['audio01']` と `loadedFlagState['audio02']` が `true` (= 読み込みが完了している) で、ほかは `false` の場合、 `['audio01', 'audio02']` が得られます。
84
+ `['audio01', 'audio02'].length` は `audioElems.length` とは当然一致しないので、まだ読み込みが完了していないことを意味します。
85
+
86
+
87
+ 余談ですが、
88
+ ```js
89
+ function confirmAllContentsLoadingAreCompleted() {
90
+ if(Object.keys(loadedFlagState).filter(key => loadedFlagState[key]).length === audioElems.length) {
91
+ console.log('All contents have loaded.');
92
+ }
93
+ }
94
+ ```
95
+ と書くよりも、
96
+ ```js
97
+ function confirmAllContentsLoadingAreCompleted() {
98
+ if(Object.keys(loadedFlagState).filter(key => loadedFlagState[key]).length !== audioElems.length) return;
99
+ console.log('All contents have loaded.');
100
+ }
101
+ ```
102
+ としたほうが、無駄なインデントが省けてbetterでしたね、失礼しました。