使用javascript更新多级嵌套对象上的值

使用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

我在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,则更新日志

让数据存储=[{
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是一个具有多个嵌套值的相当大的对象