ホームページ >ウェブフロントエンド >jsチュートリアル >文字列プロパティ名のみを使用して、深くネストされた JavaScript オブジェクトに値を動的に割り当てるにはどうすればよいですか?

文字列プロパティ名のみを使用して、深くネストされた JavaScript オブジェクトに値を動的に割り当てるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 07:26:11385ブラウズ

How Can I Dynamically Assign Values to Deeply Nested JavaScript Objects Using Only a String Property Name?

JavaScript での動的プロパティの割り当て

特定のシナリオでは、オブジェクト内に深くネストされたプロパティに値を割り当てる必要が生じる場合があります。構造。ただし、プロパティ名は文字列としてのみ指定できます。プロパティに直接アクセスするにはオブジェクト階層全体を走査する必要があるため、これは課題となる可能性があります。

解決策

この問題に対処するには、assign() を利用できます。関数:

function assign(obj, prop, value) {
    if (typeof prop === "string")
        prop = prop.split(".");

    if (prop.length > 1) {
        var e = prop.shift();
        assign(obj[e] =
                 Object.prototype.toString.call(obj[e]) === "[object Object]"
                 ? obj[e]
                 : {},
               prop,
               value);
    } else
        obj[prop[0]] = value;
}

使用法

例を考えてみましょう:

var obj = {};
var propName = "foo.bar.foobar";

assign(obj, propName, "Value");

説明

  1. プロップはまず、 Split(".") メソッド。結果は ["foo", "bar", "foobar"] になります。
  2. 配列の最初の要素 foo は、obj に割り当てられます。
  3. Object.prototype.toString.call(obj[e]) === "[object Object]" 条件は、obj.foo がオブジェクトかどうかをチェックします。 true の場合、obj.foo を obj[e] に割り当てます。
  4. obj.foo がオブジェクトでない場合は、新しいオブジェクトを作成して obj.foo に割り当てます。
  5. 繰り返しますbar と foobar のプロセス。最終的に obj.foo.bar.foobar を assign() に渡された値に設定します。 function.

assign() 関数を利用すると、プロパティ名が文字列としてしかない場合でも、任意の深さのレベルでプロパティに値を動的に割り当てることができます。

以上が文字列プロパティ名のみを使用して、深くネストされた JavaScript オブジェクトに値を動的に割り当てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。