javascript - 如何通过迭代路径来访问和编辑对象值?
问题描述
具有以下数据结构:
const foo = [
{
a: 'xxx',
b: 'xxx',
c: {
e: 'xxx',
...
}
}
...
]
e
是否可以使用此路径对象访问值
const path = [0, 'c', 'e']
并编辑它?
我试着做
setResponseState(prevState => {
let data = prevState.responseData
path.forEach(id => data = data[id])
data = {}
return prevState
})
path
是一个上下文值,但我发现data
是一个副本,因此没有保存在反应状态
谢谢
解决方案
如果您修改forEach
如下更新最后一个值应该适用于编辑对象。基本上这避免了覆盖对象引用并且只更新值。
const foo = [
{
a: "xxx",
b: "xxx",
c: {
e: "xxx",
},
},
];
const path = [0, "c", "e"];
setResponseState((prevState) => {
let data = prevState.responseData;
path.forEach((id, i) =>
i === path.length - 1 ? (data[id] = {}) : (data = data[id])
);
return prevState;
});
检查这个样本变异对象
const foo = [
{
a: "xxx",
b: "xxx",
c: {
e: "xxx",
},
},
];
const path = [0, "c", "e"];
let data = foo;
path.forEach((id, i) =>
i === path.length - 1 ? (data[id] = {}) : (data = data[id])
);
console.log(foo)
推荐阅读
- reactjs - 在 IE10 中反应未定义的地图
- react-native - React-Navigation 5 TypeError:无法读取未定义的属性'_context' 此错误位于forwardRef(BaseNavigationContainer)
- java - 如何实现在 X 分钟内未收到任何事件后发出的 Flink 事件时间触发器
- c# - Discord.NET 从一个控制台应用程序项目运行多个机器人
- reactjs - 命令 create-react-app 不运行,它会产生错误
- javascript - 基于另一个 CSS 样式元素的 Javascript 内联旋转变换样式
- javascript - 将 PHP 变量传递给 javascript,包括引号和 javascript
- java - 如何动态更改状态栏中的文本
- python - python应用程序在我使用vpn或@work的地方不起作用
- python-3.x - 如何在用户定义的函数中使用 print() 实现多行打印?