繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM