Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有负数和大数组索引的变量的值不会保存在本地存储中_Javascript_Arrays_Local Storage_Negative Number - Fatal编程技术网

Javascript 具有负数和大数组索引的变量的值不会保存在本地存储中

Javascript 具有负数和大数组索引的变量的值不会保存在本地存储中,javascript,arrays,local-storage,negative-number,Javascript,Arrays,Local Storage,Negative Number,我有一个带有不常见数组索引的变量。这是: 因此,我将其保存到本地存储中: function Save(){ var save = { //<...> MapCellData: MapCellData, MapCellDataE: MapCellDataE //<...> }; localStorage.setItem("save",JSON.stringify(save)); }

我有一个带有不常见数组索引的变量。这是:

因此,我将其保存到本地存储中:

function Save(){
    var save = {
        //<...>
        MapCellData: MapCellData,
        MapCellDataE: MapCellDataE
        //<...>
    };
    localStorage.setItem("save",JSON.stringify(save));
}

window.setInterval(function(){
   Save()
}, 10000); // Autosave every 10 sec
这就是我得到的:

如您所见,具有负索引和大索引的变量的所有值都未定义,而从0到4的索引被正确保存

注:MapCellData是一个变量,用于确定将哪个图像应用于表格单元格,而MapCellDataE是一个变量,用于确定单元格背景颜色。这两个变量都有相同的索引,因此都有相同的问题。没有如此奇怪索引的变量会正确保存。

这就是它的视觉效果

在重新加载页面之前:

重新加载页面后:

是,仅序列化
数组
对象上的数组指示符1,并丢弃所有其他属性。解决方案很简单-在以下情况下不要使用数组:

考虑到“数组”的稀疏程度,这在JSON中也会更节省空间


1::数组索引是一个字符串值属性键,它是一个规范的数字字符串,其数值i在+0范围内≤ i<232−1.

什么是“不常见数组索引”?您的代码不显示任何数组。是的,
JSON.stringify
只对
array
对象上的数组索引进行序列化,并丢弃所有其他属性。解决方案很简单:在第一张图片(Firebug DOM)上显示索引时不要使用数组。它是带有负数的索引和带有非常大的数字的索引。到目前为止,数组索引是正整数。但是,在我尝试将变量保存到localstorage之前,所有这些都工作正常。此外,它也没有解释为什么大数组索引不能保存太多。谢谢,这个解决方案是完美的。我不知道有这么方便的数组替换。
JSON.parse(localStorage.getItem("save"));
var MapCellData = {}; // instead of []
MapCellData[weirdProperty] = …;