1

我一直在研究一个涉及本地存储的应用程序。我有一个deck类型对象数组。甲板对象本身包含card类型对象。因此,在查看了如何使用 localstorage 存储对象之后,我发现了这个 SO 帖子:

在 HTML5 localStorage 中存储对象

据我了解,localstorage 仅将数据存储为字符串,因此我的卡片组对象需要使用JSON.stringify.

但是,当我从 localstorage 中检索对象时JSON.parse,我得到的对象不是我原来的用户定义类型,即deck类型。

我的问题是这样的:有没有办法从本地存储中检索我的对象作为其原始类型(甲板类型)的对象?预先感谢您的帮助!

4

1 回答 1

2

您可以使用可选的reviver 参数来转换它们:

var json = '{"decks": [{"cards":[{"id": 1},{"id": 2},{"id": 3}],"id":3},{"cards":[{"id": 4},{"id": 5},{"id": 6}],"id":4}]}';

function Deck( cards, id ) {
    this.cards = cards;
    this.id = id;
}

function Card(id) {
    this.id = id;
}

var decks = JSON.parse(json, function(key, value ) {

    if( key === "decks" ) {
        return value.map( function(deck) {
            return new Deck( deck.cards, deck.id );
        });
    }
    else if( key === "cards" ) {
        return value.map( function( card ) {
            return new Card( card.id );
        });
    }
    else {
        return value;
    }
}).decks;

然后做:

console.log( decks ) 

给出以下内容:

在此处输入图像描述

于 2012-08-05T12:06:37.313 回答