簡體   English   中英

使用變量訪問嵌套的JavaScript對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM