使用javascript更新多级嵌套对象上的值
我在sessionStorage上有一个对象,需要更新用户输入的值。我可以更新对象的根,但不能更新嵌套在更深层次上的值使用javascript更新多级嵌套对象上的值,javascript,html,javascript-objects,session-storage,Javascript,Html,Javascript Objects,Session Storage,我在sessionStorage上有一个对象,需要更新用户输入的值。我可以更新对象的根,但不能更新嵌套在更深层次上的值 request('http://localhost:7474/graphql/', query).then(data => {...} sessionStorage.setItem('queryData', JSON.stringify(data)); function update(value){ let prevData = JSON.parse(sess
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,则更新日志
让数据存储=[{
id:“x”,
婚姻状况:“已婚”
}];
函数更新(updateObj){
让prevData=dataInStorage;
让id=updateObj.id;
dataInStorage.forEach(函数(数据){
如果(data.id==id){
Object.keys(updateObj).forEach(函数(键,索引){
数据[key]=updateObj[key];
});
}否则{
log(`未找到id为${id}`的对象);
}
});
console.log(prevData)
//setItem('queryData',JSON.stringify(prevData));
}
更新({
id:“x”,
maritalStatus:“单身”
});代码>prevData
是{id:“x”,maritalStatus:“已婚”}
?或者变量中包含什么?更新如何首先构建对象并设置第一个sessionStorage对象,prevData是一个具有多个嵌套值的相当大的对象