javascript - 使用数组元素作为坐标来访问对象
问题描述
我正在尝试实现一个函数,该函数使用数组元素来访问特定对象属性,以应对如下情况:
let foo = {
bar:{
baz:"oldVal",
}
}
let coodinates = ["bar", "baz"]
function accessAndModify(obj, coord, newVal){
//should do this: obj[coord[0]][coord[1]]...[coord[coord.length - 1]] = newVal;
}
我尝试了以下方法:
function accessAndModify(obj, coord, ewVal) {
try {
[obj, ...coord].reduce((x, y) => x[y]) = newVal;
} catch (e) {
return false;
}
}
但它产生了这个错误:ReferenceError: Invalid left-hand side in assignment。
解决方案
您的代码的问题是您在对象层次结构中向下遍历太远,并且您的 reduce 正在返回obj['bar']['baz']
您实际需要的值,obj['bar']
以便您可以baz
将该对象的元素设置为新值。如果您尽快停止减少一个元素,您的代码将起作用:
let foo = {
bar: {
baz: "oldVal",
}
}
let coordinates = ["bar", "baz"]
function accessAndModify(obj, coord, newVal) {
try {
[obj, ...coord.slice(0, -1)].reduce((x, y) => x[y])[coord[coord.length - 1]] = newVal;
} catch (e) {
return false;
}
}
console.log(foo);
accessAndModify(foo, coordinates, 'newVal');
console.log(foo);
推荐阅读
- python - Kolmogorov-Smirnov 解释两个信号之间的结果
- kubernetes - 在 Kubernetes 中,是否可以通过服务选择器中的元数据字段来引用 pod?
- css - Wordpress 主题更改样式表的顺序
- typo3 - 为什么我使用 TYPO3 V9.5 后会出现 404 错误
- maven - maven:存储库中的插件,但 mvn 没有找到它
- python - Django 视图:request.data 何时是 dict 与 QueryDict?
- linux - 在 MacOS 和 Linux 上检测输入 IDLE
- godot - Godot游戏引擎中的Mainloop是什么?
- sql - 如何使用一张表中的最新日期获取价值并加入另一张表
- windows - SYSTEMINDEX 返回不存在的路径