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

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

DDD
DDDオリジナル
2024-12-09 16:55:11840ブラウズ

How Can I Dynamically Set Nested Property Values in JavaScript Objects Using a String Path?

JavaScript オブジェクトの動的プロパティ設定

オブジェクト obj と文字列 propName として保存されたプロパティ名が与えられたとします。propName はネストされたプロパティを表すことができます。として"foo.bar.foobar."

問題: propName をパスとして使用して、obj.foo.bar.foobar の値を動的に設定するにはどうすればよいですか?

解決策: 以下の assign 関数を使用してプロパティ値を設定できます。動的:

function assign(obj, prop, value) {
    // Convert the string property name into an array of nested levels
    if (typeof prop === "string")
        prop = prop.split(".");

    // Check if the current level is the last (length == 1) or nested
    if (prop.length > 1) {
        // Shift the first level of nesting (e.g., "foo")
        var e = prop.shift();
        // Recursively call `assign` on the child object (e.g., obj.foo)
        assign(obj[e] =
                 Object.prototype.toString.call(obj[e]) === "[object Object]"
                 ? obj[e]
                 : {},
               prop,
               value);
    } else
        // For the last level, set the value directly
        obj[prop[0]] = value;
}

使用法:

// Object to modify
var obj = {};
// String representing the nested property path
var propName = "foo.bar.foobar";
// Value to set
var newValue = "hello world";

// Call the `assign` function to dynamically set the property value
assign(obj, propName, newValue);

// Check the updated value (for debugging purposes)
console.log(obj.foo.bar.foobar); // Output: "hello world"

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

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