【发布时间】:2018-01-23 00:56:45
【问题描述】:
如果我有这样的对象:
let obj = {
a:{
b:{
c:{
d:{
e:'nonono'
}
}
}
}
}
我知道对象的结构是这样的:
现在我想改变对象的最内层,它是“e”属性。 我想为“e”分配另一个值。 我不想像下面这样的方式:
obj.a.b.c.d.e = 'another value';var str1 = 'a.b.c.d.e'; obj[str1[0]][str[1]][str[2]][str[3]][str[4]];var str1 = 'obj.a.b.c.d.e'; var str = str1 + "='another value'"; eval(str);
在这些之上,我可以改变对象值的属性'e', 但我认为表达我的意思并不优雅。
如果我有这样的数组:
var arr= [a,b,c,d,e],我想递归一个函数找到对象的最内层,但是我尝试,如果我到达对象的最内层,我失去了对象的引用.....所以我不能更改我想要的对象的值。
我想我会运行这些代码,如果你能帮我运行的话。
let obj = {
a: {
b: {
c: {
d: {
e: 'nonono'
}
}
}
}
}
let arr = ['a', 'b', 'c', 'd', 'e'];
let funKeepCite = (obj, index) => {
if (obj[arr[index]]) {
funKeepCite(obj[arr[index]], index + 1);
} else {
obj = 'test'
}
}
funKeepCite(obj, 0)
console.log('the result', obj)
我不能改变值,我想我失去了对象的引用,但我的问题的答案是使用for .. in,它可以保留对象的引用,我对这些感到困惑。
【问题讨论】:
-
"失去对象的引用"?
-
如果您已经知道它的结构,那么
obj.a.b.c.d.e = 'another value'是更改obj.a.b.c.d.e值的最明显方法-您的其他两种方法只是a)在2 的情况下是错误的。而且荒谬3.的情况下。 -
请向我们展示您编写递归函数的尝试,否则我们无法帮助您修复它。
-
如果你想重复这样做,你可以使用参考:
let d = obj.a.b.c.d; d.e = 'yes'。但并不是说这不能直接作用于原始类型。
标签: javascript