[解決済み] ネストしたオブジェクトのプロパティを動的に設定する
2022-05-15 09:39:11
質問
任意の深さのレベルを持つことができ、任意の既存のプロパティを持つことができるオブジェクトがあります。 たとえば
var obj = {
db: {
mongodb: {
host: 'localhost'
}
}
};
その上で、以下のようにプロパティを設定(または上書き)したいと思います。
set('db.mongodb.user', 'root');
// or:
set('foo.bar', 'baz');
ここで、プロパティ文字列は任意の深さを持つことができ、値は任意のタイプ/ものにすることができます。
プロパティキーがすでに存在する場合、値としてオブジェクトと配列はマージされる必要はありません。
前の例では、次のようなオブジェクトが生成されます。
var obj = {
db: {
mongodb: {
host: 'localhost',
user: 'root'
}
},
foo: {
bar: baz
}
};
このような機能を実現するにはどうしたらよいでしょうか?
どのように解決するのですか?
この関数は、指定された引数を使用して、データを追加/更新するために
obj
コンテナのデータを追加/更新します。 の中のどの要素が追加されたかを記録しておく必要があることに注意してください。
obj
スキーマのどの要素がコンテナで、どれが値(文字列、intsなど)なのかを把握しておかないと例外が発生することに注意してください。
obj = {}; // global object
function set(path, value) {
var schema = obj; // a moving reference to internal objects within obj
var pList = path.split('.');
var len = pList.length;
for(var i = 0; i < len-1; i++) {
var elem = pList[i];
if( !schema[elem] ) schema[elem] = {}
schema = schema[elem];
}
schema[pList[len-1]] = value;
}
set('mongo.db.user', 'root');
関連
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】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 のネストしたオブジェクトや配列に文字列パスでアクセスする
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] DataURLからBlob?
-
[解決済み] JavaScriptでクエリ文字列が存在するかどうかを確認するには?
-
[解決済み] リアクトのシャローコンパールはどのように機能するのか
-
[解決済み] React Router v4 <NavLink>と<Link>の違いについて
-
[解決済み] React.jsでテキスト入力のchange/focusOutイベントを正しくキャッチする方法とは?
-
[解決済み] jQueryを使って、ターゲット要素のクリック座標を取得する方法
-
[解決済み] AngularJsでng-repeatを使用してフィルタリング(キー、値)を行うには?
-
[解決済み] AngularJS - $http.postがJSONの代わりにリクエストパラメータを送信する方法はありますか?