如果我将我的数组保存在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
我做错了什么,它应该有效还是有另一种方法来保存它,我的值是用字符串键分配的?
提前致谢!
答案 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);
}