我在sessionStorage上有一个对象,我需要为其更新用户输入上的值。我可以在Object的根目录进行更新,但不能在更深层次上嵌套的值进行更新。
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
答案 0 :(得分:1)
您存储的数据是一个数组。因此,像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"
});