javascript - 使用 javascript 更新多级嵌套对象的值
问题描述
我在 sessionStorage 上有一个对象,我需要更新用户输入的值。我能够更新对象的根,但不能更新嵌套在更深层次的值。
request('http://localhost:7474/graphql/', query).then(data => {...}
sessionStorage.setItem('queryData', JSON.stringify(data));
function update(value){
let prevData = JSON.parse(sessionStorage.getItem('queryData'));
Object.keys(value).forEach(function(val, key){
prevData[val] = value[val];
});
sessionStorage.setItem('queryData', JSON.stringify(prevData));
}
update({ maritalStatus: "single" });
所以 maritalStatus 最终被添加而不是被替换,我必须替换值:
Object: [,...]
0: {id: "x", maritalStatus: "married"} //want to replace this value here
maritalStatus: "single" // this is where the value is been written
解决方案
您存储中的数据是一个数组。因此,您更新它的方式是将另一个属性添加到具有索引和值prevData[val] = value[val];
的数组中。索引处的对象未触及。maritalStatus
"single"
0
我建议的解决方法是id
在您的更新调用中也包含 。然后遍历存储中的数组并查找具有匹配 id 的对象。
一旦 id 匹配更新该对象,或者如果没有找到 id 匹配则记录。
let dataInStorage = [{
id: "x",
maritalStatus: "married"
}];
function update(updateObj) {
let prevData = dataInStorage;
let id = updateObj.id;
dataInStorage.forEach(function(data) {
if (data.id === id) {
Object.keys(updateObj).forEach(function(key, index) {
data[key] = updateObj[key];
});
} else {
console.log(`did not find object with id: ${id}`);
}
});
console.log(prevData)
//sessionStorage.setItem('queryData', JSON.stringify(prevData));
}
update({
id: "x",
maritalStatus: "single"
});
推荐阅读
- excel - VBA自动过滤格式为 - (减号)的零
- flutter - 按钮文字颜色变化
- c++ - 如何将 Qt 桌面应用程序连接到在 AWS 上运行的 mysql 数据库或任何在线 mysql 数据库
- bots - 是否可以自动化我的 Telegram 帐户以将消息从某些渠道共享到一个渠道?
- javascript - 在引导数据表中加载 json 数据
- sql-server - 使用选择查询重复签入表
- sql - 如何在 SQL 表中选择一个随机行并在那里插入一些东西?
- mysql - 如何停止插件在特定 wp 页面上发送查询
- c++ - 流输入运算符导致使用 clang 的分段错误,但适用于 gcc
- python - Python PyGame 图像(大金刚)不动