[解決済み] Javascript: 配列で指定したオブジェクト名でネストされたオブジェクトを動的に作成する方法
2023-07-05 05:52:37
質問
このJavascriptについて、どなたか教えていただければと思います。
私は"Settings"というオブジェクトを持っていて、そのオブジェクトに新しい設定を追加する関数を書きたいと思います。
新しい設定の名前と値は文字列として提供されます。設定名を与える文字列は、アンダースコアによって配列に分割されます。新しい設定は、配列の各部分によって与えられる名前を持つ新しいネストされたオブジェクトを作成することによって、既存の "Settings"オブジェクトに追加されるはずですが、最後の部分は、設定の値を与える文字列になるはずです。これで、設定を参照して、その値を警告することができるようになります。静的な方法でこれを行うには、次のようにします...
var Settings = {};
var newSettingName = "Modules_Video_Plugin";
var newSettingValue = "JWPlayer";
var newSettingNameArray = newSettingName.split("_");
Settings[newSettingNameArray[0]] = {};
Settings[newSettingNameArray[0]][newSettingNameArray[1]] = {};
Settings[newSettingNameArray[0]][newSettingNameArray[1]][newSettingNameArray[2]] = newSettingValue;
alert(Settings.Modules.Mediaplayers.Video.Plugin);
... ネストされたオブジェクトを作成する部分はこうなっています...
Settings["Modules"] = {};
Settings["Modules"]["Video"] = {};
Settings["Modules"]["Video"]["Plugin"] = "JWPlayer";
しかし、設定名を構成するパーツの数は様々で、例えば newSettingName は "Modules_Floorplan_Image_Src" となる可能性があるので、次のような関数を使って動的にこれを行いたいと思います...
createSetting (newSettingNameArray, newSettingValue);
function createSetting(setting, value) {
// code to create new setting goes here
}
どなたか、これを動的に実行する方法を教えていただけませんか?
私は、配列を反復するためにそこにfor...ループがなければならないと仮定しますが、私はネストされたオブジェクトを作成する方法を見つけ出すことができませんでした。
もしあなたがここまで読んでくれたなら、たとえあなたが助けられなくとも、読むのに時間を割いてくれて本当にありがとうございます。
どのように解決するのですか?
function assign(obj, keyPath, value) {
lastKeyIndex = keyPath.length-1;
for (var i = 0; i < lastKeyIndex; ++ i) {
key = keyPath[i];
if (!(key in obj)){
obj[key] = {}
}
obj = obj[key];
}
obj[keyPath[lastKeyIndex]] = value;
}
使用方法
var settings = {};
assign(settings, ['Modules', 'Video', 'Plugin'], 'JWPlayer');
関連
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] JavaScriptで配列を空にするにはどうしたらいいですか?
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] ネストしたオブジェクトのプロパティを動的に設定する