我有这本词典
"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))
尝试并告诉我是否使用数字(字符串)作为索引就可以了!我该如何解决这个问题?谢谢。
答案 0 :(得分:2)
您将数组([]
)和对象({}
)混淆。一开始你说:
我得到了这个数组:
"name" : { "2016" : { "1" : "info" }
但这是一个对象。
你的问题有点难以理解。但是如果你实例化一个空数组,并告诉它数字2016应该有一个特定的值,它将填充其余的空(null
)值。
您想要使用对象而不是数组。 查看对象和数组混淆的代码。您希望使用键“2016”的对象,而不是使用数字作为索引的数组。
在审核提供的代码后添加了信息
(顺便说一下,我在下面的解释中将“sesion”拼写为'session')
行:
var session = {}
制作一个空对象。这一行:
session["name"]=["2016"];
将此对象的属性"name"
设置为包含唯一字符串"2016"
的数组。
现在它变得有趣了;你刚刚将name
属性设为数组,所以行
session["name"]["2016"]=["1"];
使编译器使用以下逻辑;因为session [“name”]是一个数组,所以当你引用session["name"]["2016"]
时,你可能并不是要在它上面设置一个属性;字符串“2016”被强制转换为数字并在其上放置一个新数组,其中包含字符串“1”。
此时我必须指出你的代码没有运行,并且在修复之后输出不像你把它放在你的问题中。之后发生的事情和以前一样,只是你在x
的第一个位置输入新数组。
前面提到的代码中的主要问题在于混合数组和对象。
替换
行session["name"]=["2016"];
例如:
session["name"] = {}
实例化一个对象,你可以在其上放置诸如“2016”之类的属性,我不确定具体的目标是什么,但是如果你想在这个属性下创建一个数组,那么就这样做:
session["name"]["2016"]=[x];