Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用变量访问嵌套JavaScript对象_Javascript - Fatal编程技术网

使用变量访问嵌套JavaScript对象

使用变量访问嵌套JavaScript对象,javascript,Javascript,我想使用变量访问(获取/设置)nestedJS对象 例如,它看起来是这样的: $obj.children.12.children.32.Name; // Returns "Foo" 现在,我有了一个“路由”数组(或任何易于处理的数组): 并希望获得对象的值 就像我在Stackover上读到的一样,有一种非常简单的方法(解决方案2) 但是,现在我想更改传递的键/路由的值。有办法吗 多谢各位 编辑: 如果有帮助的话,我可以使用jQuery/Angluar特性 从中借用代码,我们可以轻松地制作一个g

我想使用变量访问(获取/设置)nestedJS对象

例如,它看起来是这样的:

$obj.children.12.children.32.Name; // Returns "Foo"
现在,我有了一个“路由”数组(或任何易于处理的数组):

并希望获得对象的值

就像我在Stackover上读到的一样,有一种非常简单的方法(解决方案2)

但是,现在我想更改传递的键/路由的值。有办法吗

多谢各位

编辑: 如果有帮助的话,我可以使用jQuery/Angluar特性

从中借用代码,我们可以轻松地制作一个getter:

function getFromPath(obj, pathArray) {
  var res = obj;
  for (var i=0; i<pathArray.length; i++) { res = res[pathArray[i]]; }
  return res;
}
我们用setToPath($obj,[“children”,12,“children”,32,“Name”],“Dana”)来称呼它

或者,如果只想使用一个getter执行此操作,可以将路径缩短一项,并对getter的结果执行设置:

var secondToLast = getFromPath($obj, ["children",12,"children",32]);
secondToLast["Name"] = "Dana";

假设您编写了一个类似于
getPath(obj,pathArray)
的getter,您可以编写一个setter
setValueAtPath(obj,pathArray,valToStore)
,其作用与
getPath
完全相同,只是它的循环停在倒数第二个对象(例如,
i
)处,并且执行
secondToLastItem[finalKey]=valToStore
。谢谢您的回复,@apsillers。我很难理解二传手是如何工作的。如果我执行secondToLastObj[finalKey]=valToStore-值存储在变量'secondToLastObj'中,而不是存储在对象本身中,对吗?但是我想在包含所有数据的“大”对象中更改它,但在大对象中也会更改它。变量
secondToLastObj
只指向大对象中的部分,数据实际上并没有存储在那里。@apsillers,我会尝试一下,我确信它会起作用,因为你这么说。但是为什么呢?我知道PHP的语法:foreach($x as$k=>&v){}。现在$v的变化也将冲击$x。但是,在没有任何附加语法的简单for()循环中,它是如何工作的呢?非常感谢你的帮助!所以它100%完美地工作。非常感谢你!对于希望复制和粘贴此内容的所有人:请注意,第5行中的路径[i]应该是pathArray[i]。
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;
}
var secondToLast = getFromPath($obj, ["children",12,"children",32]);
secondToLast["Name"] = "Dana";