[解決済み] Javascriptのオブジェクトリテラルの動的キー [重複]。
2022-11-10 02:30:24
質問
私はNodesでプロジェクトに取り組んでいて、オブジェクトリテラル内のキーに関する小さな問題に遭遇しました。
var required = {
directories : {
this.applicationPath : "Application " + this.application + " does not exists",
this.applicationPath + "/configs" : "Application config folder does not exists",
this.applicationPath + "/controllers" : "Application controllers folder does not exists",
this.applicationPath + "/public" : "Application public folder does not exists",
this.applicationPath + "/views" : "Application views folder does not exists"
},
files : {
this.applicationPath + "/init.js" : "Application init.js file does not exists",
this.applicationPath + "/controllers/index.js" : "Application index.js controller file does not exists",
this.applicationPath + "/configs/application.js": "Application configs/application.js file does not exists",
this.applicationPath + "/configs/server.js" : "Application configs/server.js file does not exists"
}
}
さて、多くの人はこれを見て問題ないと思うでしょうが、コンパイラはずっと
:
(コロン)が足りないと言ってきますが、そうではなく、どうやら
+
とか
.
はどちらもコンパイラに影響を与えます。
現在、オブジェクトリテラルは実行時ではなく、コンパイル時に作成されると思っています。
this.applicationPath
や連結などの動的変数は使用できません。
コードの大きな塊を書き直すことなく、このような障害を克服する最良の方法は何でしょう。
どのように解決するのですか?
ダイナミックキーは、ブラケット記法で設定できます。
required.directories[this.applicationPath + "/configs"] = "Application config folder does not exists";
(もちろんどこでこの定義をやっても
this.applicationPath
が存在しなければなりません)。
しかし
this.applicationPath
が必要なのでしょうか?これらの値にはどのようにアクセスするのでしょうか?多分、あなたはただ削除することができます
this.applicationPath
を削除することができます。
しかし、万が一必要な場合は
多くのコードの繰り返しを避けたいのであれば、キーを初期化するために配列を使用することができます。
var dirs = ['configs', 'controllers', ...];
var files = ['init.js', 'controllers/index.js', ...];
var required = { directories: {}, files: {} };
required.directories[this.applicationPath] = "Application " + this.application + " does not exists";
for(var i = dirs.length; i--;) {
required.directories[this.applicationPath + '/' + dirs[i]] = "Application " + dirs[i] + " folder does not exists";
}
for(var i = files.length; i--;) {
// same here
}
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーと値のペアを追加するにはどうすればよいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] javascriptでオプションのパラメータを扱う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptのオブジェクトリテラルで変数をキーとして使用するには?
-
[解決済み] 動的なキーを持つオブジェクトの作成 [重複]。
-
[解決済み] JSのDateからDay名
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる