[英]Accessing nested JavaScript objects with variables
我想訪問(獲取/設置)帶有變量的nestedJS對象。
例如,靜態它看起來像這樣:
$obj.children.12.children.32.Name; // Returns "Foo"
現在,我有了一個“ Route”數組(或者任何容易處理的東西):
["children",12,"children",32,"Name"]
並想獲得對象的價值。
就像我讀到這里的Stackover,有一個很簡單的方法來做到這一點(方案二)。
但是,現在我想更改傳遞的鍵/路由的值。 有什么辦法嗎?
非常感謝你!
編輯:如果可以,我可以使用jQuery / Angluar-Features。
從您鏈接到的帖子上接受的答案中獲取代碼,我們可以輕松地獲得一個getter:
function getFromPath(obj, pathArray) {
var res = obj;
for (var i=0; i<pathArray.length; i++) { res = res[pathArray[i]]; }
return res;
}
我們用getFromPath($obj, ["children",12,"children",32,"Name"]);
調用它getFromPath($obj, ["children",12,"children",32,"Name"]);
。
由於要將此getter函數轉換為setter,因此要在倒數第二個對象上設置屬性。 我們可以通過以下方式做到這一點:盡早停止循環一次迭代,然后在對象上使用最終屬性名稱執行set:
function setToPath(obj, pathArray, valueToSet) {
var res = obj;
// note the `length - 1` here: we don't go to the end of the path
for (var i=0; i<pathArray.length - 1; i++) { res = res[pathArray[i]]; }
// res is now the second-to-last object in the path,
// and we'll set the final value as a property on the object
var finalKey = pathArray[pathArray.length-1];
res[finalKey] = valueToSet;
}
我們用setToPath($obj, ["children",12,"children",32,"Name"], "Dana");
調用它setToPath($obj, ["children",12,"children",32,"Name"], "Dana");
。
另外,如果您只想使用吸氣劑來完成此操作,則可以將路徑縮短一個項目,然后對吸氣劑的結果進行設置:
var secondToLast = getFromPath($obj, ["children",12,"children",32]);
secondToLast["Name"] = "Dana";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.