在JavaScript 中使用字串名稱設定巢狀物件屬性
在JavaScript 中,存取和修改物件屬性對於管理資料至關重要。但是,如果您僅以字串形式提供屬性名稱而不是其直接鍵序列,該怎麼辦?當屬性作為使用者輸入動態產生或接收的情況下,可能會發生這種情況。
考慮以下物件:
var obj = {};
和屬性名稱:
var propName = "foo.bar.foobar";
設定 obj.foo.bar.foobar的值,傳統上您可以使用以下命令語法:
obj.foo.bar.foobar = "hello world";
但是,這種方法需要手動遍歷鏈中的每個屬性,這可能會變得繁瑣且容易出錯,尤其是對於深度嵌套的屬性。
遞歸屬性賦值函數
為了解決這個挑戰,可以實作一個名為allocate 的遞歸函數來簡化賦值過程:
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; }
此函數接受一個物件(obj)、一個字串形式的屬性名稱(prop)以及一個要賦給該屬性的值(value)。它遞歸地遍歷物件層次結構並將適當的屬性設為指定值。
用法
使用allocate 設置obj.foo.bar.foobar 的值function:
var obj = {}, propName = "foo.bar.foobar"; assign(obj, propName, "Value");
此代碼將創建必要的嵌套屬性並設定obj.foo.bar.foobar 為「Value」。
透過利用遞歸屬性賦值函數,您可以使用字串名稱動態存取和修改 JavaScript 中的巢狀物件屬性,為複雜資料結構提供靈活且可擴展的解決方案.
以上是如何使用字串名稱設定嵌套 JavaScript 物件屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!