有没有一种方法可以将对象的键引用为变量,然后更改其值?我正在尝试
const obj = {
x: {
y: {
z: 'test'
}
}
}
const func = () => {
let root = obj['x'];
root = 'test 2';
}
func();
console.log(obj);
我在写递归函数时试图解决这个问题,以便将root更改为obj ['x'] ['y']
答案 0 :(得分:2)
如果我正确理解了您的问题,答案可能是“并非没有做真正奇怪的事情”。我相信你在问的是这个。鉴于:
const obj = {
x: {
y: {
z: 'test'
}
}
}
您想将obj.x
(相当于obj['x']
)存储到变量中,以这种方式分配给该变量实际上将使对象{{1}的x
字段发生突变}。现在,您不能这样做。进行绑定后:
obj
然后重新分配let root = obj.x
完全不会更改root
:obj
是与root
不同的变量。画一幅画,会有所帮助。但是,obj
本质上是指向root
的指针,因此如果您这样做:
obj.x
比这个做的突变
root.y = 'test 2'
。
但是,请注意,您不能将obj.x.y
分配给变量,然后使用该变量来突变obj.x
的{{1}}字段。您只能在x
之内对字段进行突变。例如,JavaScript不具备对事物进行别名(或创建左值)的能力,例如C ++。
如果您确实要更新obj
的{{1}}属性,则应仅将字符串obj.x
放入这样的变量中:
x
然后您可以做:
obj
,这将变异x
。但是请记住,您不能先评估root = 'x'
,然后使用该结果来突变obj[root] = 'a new value for obj.x'
。好吧,我的意思是,并非没有做过这样的事情:
obj.x
但是不要。
顺便说一句,如果obj.x
也是 一个变量,那么您可以这样做:
obj.x
希望我猜到你想做什么。无论如何,也许这个答案会给出一些想法。
答案 1 :(得分:0)
const func = () => {
let root = obj['x'];
root = 'test 2';
}
这会将变量root
重新分配为新值,并且不影响该对象。而是直接分配给该对象:
obj['x'] = 'test 2'
const obj = {
x: {
y: {
z: 'test'
}
}
}
const func = () => {
obj['x'] = 'test 2';
}
func();
console.log(obj);
或者您可以通过root
变量来更改键上的值:
const obj = {
x: {
y: {
z: 'test'
}
}
}
const func = () => {
let root = obj['x'];
root['y'] = 'test 3';
}
func();
console.log(obj);
答案 2 :(得分:0)
只需传递值
const obj = {x:{ y:{ z:“测试” }}
删除Object.assign(obj,{newKey:obj.oldKey})。oldKey;