我想访问(获取/设置)带有变量的嵌套JSS对象。
例如,静态看起来像这样:
$obj.children.12.children.32.Name; // Returns "Foo"
现在我有一个“路由”数组(或任何容易处理的数组):
["children",12,"children",32,"Name"]
想要获得对象的价值。
就像我在Stackover上阅读here一样,有一种非常简单的方法(解决方案2)。
但是,现在我想更改传递的键/路由的值。有没有办法做到这一点?
非常感谢!
修改 我可以使用jQuery / Angluar-Features,如果它对我有帮助的话。
答案 0 :(得分:1)
借用accepted answer on the post you've linked to中的代码,我们可以轻而易举地制作一个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"]);
。
由于您希望将此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");
。
或者,如果您只想使用getter来执行此操作,则可以将路径缩短一个项目并对getter的结果执行设置:
var secondToLast = getFromPath($obj, ["children",12,"children",32]);
secondToLast["Name"] = "Dana";