带字符串键的JavaScript LocalStorage数组

时间:2016-05-02 12:14:50

标签: javascript arrays

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

示例:

var myArray = [];

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

一切正常,以下作品输出:

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

现在,如果我将数组存储为:

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

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

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

我做错了什么,它应该有效还是有另一种方法来保存它,我的值是用字符串键分配的?

提前致谢!

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

正如丹尼尔在评论中所说,你的阵列不仅仅是坚持不懈,而且创造得很糟糕。

您可以在浏览器的控制台中轻松查看:

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

如您所见,尝试通过String键影响数组的值并不起作用。

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

由于Daniel已经回答了Object方法,所以这里是Map one:

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

Map的优点是迭代更容易:

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