[英]Update values on multi level nested Object with javascript
我在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
您存储的数据是一个数组。 所以您更新它的方式就像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" });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.