在会话存储中设置嵌套对象值

Setting nested object value in session storage

大家好,更新​​我存储在 sessionstorage 中的值时遇到困难。我尝试了几种方法来定位嵌套对象值,但没有成功。任何帮助将不胜感激。

我在 JavaScript

中创建的对象
   var projectInfo = {
        project1: {
            name: 'Unique name',
            extraCredit: true
        }
        project2: {
            name: 'Unique name',
            extraCredit: true
        }
    }

我是如何坚持到会话的

sessionStorage.setItem('projectInfo', JSON.stringify(projectInfo));

如何定位项目信息中的嵌套项目名称。例如

sessionStorage.setItem(projectInfo.project1.name, 'Student Fund raiser')

你不能那样做。您必须检索整个对象,解析它,更改您想要的内容,然后将其放回存储中:

var projectInfo = JSON.parse(sessionStorage.getItem('projectInfo'));
projectInfo.project1.name = 'Student Fund raiser';
sessionStorage.setItem('projectInfo', JSON.stringify(projectInfo));

注意:你不妨检查一下sessionStorage.getItem returns something以防对象还没有存储。

当嵌套项被字符串化时,您不能更改它的值(好吧,我想理论上您可以通过某种方式自己解析字符串,但这听起来像是一件苦差事)。我认为最好的方法是检索字符串,将其解析回 JS 对象,设置值,重新将其字符串化,然后存储它。

var projectString = sessionStorage.getItem('projectInfo')
var projectObject = JSON.parse(projectString)
projectObject.project1.name = 'Student Fund raiser'
sessionStorage.setItem(JSON.stringify(projectObject))

如果报错,说明不能添加到null

易卜拉欣·马里尔的回答是:

var projectInfo = JSON.parse(sessionStorage.getItem('projectInfo'));
projectInfo.project1.name = 'Student Fund raiser';
sessionStorage.setItem('projectInfo', JSON.stringify(projectInfo));

试试这个:

var projectInfo = JSON.parse(sessionStorage.getItem('projectInfo'));
projectInfo = projectInfo === null ? {} : projectInfo;
projectInfo.project1.name = 'Student Fund raiser';
sessionStorage.setItem('projectInfo', JSON.stringify(projectInfo));