将对象的键引用为变量-js

时间:2018-11-15 06:20:25

标签: javascript

有没有一种方法可以将对象的键引用为变量,然后更改其值?我正在尝试

const obj = {
  x: {
    y: {
      z: 'test'
    }
  }
}

const func = () => {
  let root = obj['x'];
  root = 'test 2';
}

func();

console.log(obj);

我在写递归函数时试图解决这个问题,以便将root更改为obj ['x'] ['y']

3 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,答案可能是“并非没有做真正奇怪的事情”。我相信你在问的是这个。鉴于:

const obj = {
  x: {
    y: {
      z: 'test'
    }
  }
}

您想将obj.x(相当于obj['x'])存储到变量中,以这种方式分配给该变量实际上将使对象{{1}的x字段发生突变}。现在,您不能这样做。进行绑定后:

obj

然后重新分配let root = obj.x 完全不会更改rootobj是与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;