2016-05-02 47 views
1

如果我将数组保存在localStorage中,则使用String键保存的值会丢失。JavaScript LocalStorage Array with String Keys

实施例:

var myArray = []; 

myArray["key1"] = "value1"; 
myArray[123] = "value2"; 

一切正常和以下工作的输出:

myArray["key1"] => value1 
myArray[123] => value2 

现在,如果i中的阵列存储与类似:

localStorage.setItem('myStoredArray',JSON.stringify(myArray)); 
var myArray = JSON.parse(localStorage.getItem('myStoredArray')); 

的输出是缺少使用字符串键分配的值:

myArray["key1"] => undefined 
myArray[123] => value2 

我做得不对,应该是工作或有另一种方式来保存它,我已分配了字符串键我的价值观?

提前致谢!

+1

你需要'parse'它在阅读之前.. – Rayon

+0

我错过了我的例子。这不是问题。否则其余的将不会工作 –

+0

@Rayon谢谢各位 –

回答

3

JavaScript中没有关联数组。你应该使用一个将所有键转换为字符串的对象。

var myObj = {}; // <<< change here 

myObj["key1"] = "value1"; 
myObj[123] = "value2"; 
+0

非常感谢。我会尽快接受它! –

2

正如丹尼尔在评论中指出的那样,你的数组不仅仅是严重的持久性,它的创建也很糟糕。

你可以很容易地看到它在浏览器的控制台:

>var myArray = []; 
<undefined 
>myArray["key1"] = "value1"; 
<"value1" 
>myArray 
<[] 

正如你所看到的,试图通过一个String关键影响的值到一个数组中不起作用。

您可以尝试使用ES6 Maps或对象。

由于丹尼尔已经与对象的方法回答,这里的地图之一:

var myMap = new Map(); 
myMap.set("key1", "value1"); 
myMap.set("123", "value2"); 

和地图的优点是比较容易的迭代:

for (var [key, value] of myMap.entries()) { 
    console.log(key + " = " + value); 
} 
+0

感谢您的工作! –