存储和检索来自localStorage的Set

时间:2017-01-30 09:37:52

标签: javascript ecmascript-6 set local-storage

我有以下代码创建Node.NIL

Set

现在我将其存储到var foo = new Set(); foo.add(1); foo.add(2);

localStorage

但是,如果我尝试像这样检索它:

localStorage.setItem("set",foo);

我得到了一个" [对象集]"结果。任何想法我如何检索实际集?

2 个答案:

答案 0 :(得分:1)

要存储Set,您首先需要使用JSON.stringify,这实际上可以在对象上使用,但要在Set上使用它,您必须先将其转换为数组。

这是因为存储在集合中的数据不会存储为属性。

var foo = new Set();
foo.add(1);
foo.add(2);

// [...foo] is be used as spread operator to convert to array
localStorage.setItem("set",JSON.stringify([...foo]));
var x = localStorage.getItem('set');
console.log('x: ', JSON.parse(x)); // will log [1,2]

DEMO

答案 1 :(得分:0)

为此,首先应将一个集转换为数组。

可以使用ES6迭代来完成:

const fooArr = [...foo];

或者,如果代码应该被转换为ES5,那么最好应该是Array.from,因为它很容易被多元化。然后它可以被字符串化并存储:

const fooArr = Array.from(foo);
localStorage.setItem('set', JSON.stringify(fooArr));

反过来检索:

const fooArr = JSON.parse(localStorage.getItem('set'));
const foo = new Set(...fooArr);