Javascript 年份作为指数

Javascript 年份作为指数,javascript,jquery,json,Javascript,Jquery,Json,我有这本字典 "name" : { "2016" : { "1" : "info" } } 我使用json.stringfy将其添加到sessionStorage中,效果非常好。然后,我在第一本词典的后面附加了另一本词典: name: { 2016: { 1: { info: { 0: { "question": "qs

我有这本字典

"name" : {
        "2016" : {
            "1" : "info"
        }
}
我使用json.stringfy将其添加到sessionStorage中,效果非常好。然后,我在第一本词典的后面附加了另一本词典:

name: {
    2016: {
        1: {
            info: {
                0: {
                    "question": "qs1",
                    "information": "info1"
                },
                1: {
                    "question": "qs12",
                    "information": "info2"
                },
            }
        }
    }
}
我使用json.stringfy将相同的内容转换为字符串。然后我注意到:

name: {
    0 : "2016",
    1 : null,
    2 : null, //until 2016
    2016: {
        1: {
            info: {
                0: {
                    "question": "qs1",
                    "information": "info1"
                },
                1: {
                    "question": "qs12",
                    "information": "info2"
                },
            }
        }
    }
当typeof告诉我它是字符串而不是数字时,我不知道它为什么会计数。还有,我不明白为什么第一本字典没有这样做

代码如下:

(function($){
x = {
    "info": {
        "0": {
            "question": "qs1",
            "information": "info1"
        },
        "1": {
            "question": "qs12",
            "information": "info2"
        },
    }
}

var sesion = {};
var stringinfo;
sesion["name"]=["2016"];
sesion["name"]["2016"]=["1"];
sesion["name"]["2016"]["1"] = x;

stringinfo = json.stringfy(sesion);

console.log(sesion);
console.log(stringinfo)
}(jQuery))
试试看,告诉我使用数字(字符串)作为索引是否可以做到这一点!我如何解决这个问题?谢谢。

您混淆了数组(
[]
)和对象(
{}
)。一开始你说:

我得到了这个数组:

"name" : {
        "2016" : {
            "1" : "info"
        }
但这是一个目标

你的问题有点难理解。但是如果您实例化一个空数组,并告诉它numer 2016应该有一个特定的值,它将用空(
null
)值填充其余的数组

您希望使用对象,而不是数组。 查看您的代码,其中对象和数组混合在一起。您希望使用键为“2016”的对象,而不是使用数字作为索引的数组

查看提供的代码后添加信息

(顺便说一句,我在下面的解释中将“sesion”改为“session”)

该行:

var session = {}
生成一个空对象。该行:

session["name"]=["2016"];
将此对象的属性
“name”
设置为仅包含字符串
“2016”
的数组。 现在它变得有趣了;您刚刚将
name
属性设置为数组,因此

session["name"]["2016"]=["1"];
session["name"]=["2016"];
使编译器使用以下逻辑;由于session[“name”]是一个数组,当您参考
session[“name”][“2016”]
时,您可能并不想在其上设置属性;字符串“2016”被强制为一个数字,并在其上放置一个新数组,其中包含字符串“1”

在这一点上,我必须指出,您的代码没有运行,在修复它之后,输出与您在问题中提出的不同。之后发生的情况与之前相同,只需将新数组放入
x
中对象的第一个位置

如前所述,代码中的主要问题在于数组和对象的混合

更换线路

session["name"]["2016"]=["1"];
session["name"]=["2016"];
例如:

session["name"] = {}
要实例化一个可以放置属性(如“2016”)的对象,我不确定确切的目标是什么,但如果要在此属性下创建数组,请执行以下操作:

session["name"]["2016"]=[x];
您混淆了数组(
[]
)和对象(
{}
)。一开始你说:

我得到了这个数组:

"name" : {
        "2016" : {
            "1" : "info"
        }
但这是一个目标

你的问题有点难理解。但是如果您实例化一个空数组,并告诉它numer 2016应该有一个特定的值,它将用空(
null
)值填充其余的数组

您希望使用对象,而不是数组。 查看您的代码,其中对象和数组混合在一起。您希望使用键为“2016”的对象,而不是使用数字作为索引的数组

查看提供的代码后添加信息

(顺便说一句,我在下面的解释中将“sesion”改为“session”)

该行:

var session = {}
生成一个空对象。该行:

session["name"]=["2016"];
将此对象的属性
“name”
设置为仅包含字符串
“2016”
的数组。 现在它变得有趣了;您刚刚将
name
属性设置为数组,因此

session["name"]["2016"]=["1"];
session["name"]=["2016"];
使编译器使用以下逻辑;由于session[“name”]是一个数组,当您参考
session[“name”][“2016”]
时,您可能并不想在其上设置属性;字符串“2016”被强制为一个数字,并在其上放置一个新数组,其中包含字符串“1”

在这一点上,我必须指出,您的代码没有运行,在修复它之后,输出与您在问题中提出的不同。之后发生的情况与之前相同,只需将新数组放入
x
中对象的第一个位置

如前所述,代码中的主要问题在于数组和对象的混合

更换线路

session["name"]["2016"]=["1"];
session["name"]=["2016"];
例如:

session["name"] = {}
要实例化一个可以放置属性(如“2016”)的对象,我不确定确切的目标是什么,但如果要在此属性下创建数组,请执行以下操作:

session["name"]["2016"]=[x];

我看到了一个对象:<代码> name…<代码>,也许您考虑使用一个数组而不是一个对象,用于<代码>信息>代码>。当设置一个实际数组的索引时,如<代码>数组[2016 ] < /代码>:如果前面的2015个元素没有被设置,那么你将有未定义的索引,因此,当字符串化/解析时,为什么会得到null?如何附加这两个字典;sesion['name']=['2016'];sesion['name']['2016']=[1];sesion['name']['2016'][1]=infoArray;setItem('value',JSON.stringify(sesion));我从一个Ajax中得到的信息数组看到了一个对象:<代码> name…<代码>,也许你考虑使用一个数组而不是一个对象,用于<代码>信息>代码>。当设置一个实际数组的索引时,如<代码>数组[2016 ] < /代码>:如果前面的2015个元素没有被设置,那么你将有未定义的索引,因此,当字符串化/解析时,为什么会得到null?如何附加这两个字典;sesion['name']=['2016'];sesion['name']['2016']=[1];sesion['name']['2016'][1]=infoArray;setItem('value',JSON.stringify(sesion));我从Ajax上得到的infoArray可能我表达错了,看这里!也许我表达错了,看这里!