javascript - 引用对象的键作为变量 - js
问题描述
有没有办法将对象的键作为变量引用,然后更改其值?我正在尝试这个
const obj = {
x: {
y: {
z: 'test'
}
}
}
const func = () => {
let root = obj['x'];
root = 'test 2';
}
func();
console.log(obj);
我正在尝试解决这个问题,因为我正在编写一个递归函数,以便将 root 更改为更像 obj['x']['y']
解决方案
如果我正确理解您的问题,答案可能是“并非没有做非常奇怪的事情”。我相信你问的是这个。鉴于:
const obj = {
x: {
y: {
z: 'test'
}
}
}
您想将obj.x
(等效地obj['x']
)存储到一个变量中,这样分配给该变量实际上会改变x
object 的字段obj
。现在你不能那样做。进行绑定后:
let root = obj.x
然后重新分配root
根本不会改变obj
:root
是一个不同的变量obj
。画个图,会有帮助的。但是,如果您这样做,root
本质上是一个指向so 的指针:obj.x
root.y = 'test 2'
比这确实发生了变异obj.x.y
。
但是,请注意,您不能分配obj.x
给一个变量,然后使用该变量来改变x
. obj
您只能在 WITHIN 中更改字段obj.x
。例如,JavaScript 不具备为 C++ 之类的东西取别名(或生成左值)的能力。
如果您真的想更新 的x
属性,obj
那么您应该只将字符串x
放入如下变量中:
root = 'x'
那么你可以这样做:
obj[root] = 'a new value for obj.x'
这会发生变异obj.x
。但是请记住,您不能先评估obj.x
然后使用该结果来 mutate obj.x
。好吧,我的意思是,并非没有做一些像这样非常讨厌的事情:
root = 'obj.x';
eval(`${root} = 'a new value for obj.x';`);
但是不要。
顺便说一句,如果obj
也是一个变量,那么你可以这样做:
receiver = obj;
prop = 'x';
Reflect.set(receiver, prop, 'the new value')
希望我猜到你想做什么。无论如何,也许这个答案会给出一些想法。
推荐阅读
- google-sheets - 查询一张表中的多列
- selenium-webdriver - 如何在 appium(Android&IOS) 中从一个 wifi 网络切换到另一个 wifi
- wpf - 将桌面应用程序的 UI 从 winforms 更改为 wpf 的步骤
- java - 在另一个微调器中选择选项时隐藏编辑文本或微调器
- flutter - Flutter:如何显示列表中的项目数
- database - 无法使用 Eclipse Studio 连接到 SAP Hana Express DB
- selenium - 测试是否打开了软键盘
- selenium - javascriptexecutor.executescript 不适用于某些应用程序
- oop - 检查地图中的连续值?
- amazon-web-services - 为 SSE-C 生成预签名 URL 时出错