年份作为指数

时间:2018-04-20 20:10:18

标签: javascript jquery json

我有这本词典

"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))

尝试并告诉我是否使用数字(字符串)作为索引就可以了!我该如何解决这个问题?谢谢。

1 个答案:

答案 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];