在javascript中使用字符串索引动态创建二维表

时间:2012-08-17 02:13:22

标签: javascript arrays json multidimensional-array

我需要将表解析为JSON,我找到了这个解决方案并且它可以工作:

    var tab=[{"value":"1.0","label":"Alabama"},{"value":"2.0","label":"Alaska"},        {"value":"3.0","label":"American Samoa"}];
    var myJsonString = JSON.stringify(tab);  
    var jsonData = $.parseJSON(myJsonString);

问题在于我动态声明二维表格标签'它不起作用:

    var tab_desc1= new Array(3);
    tab_desc1[0]=new Array(2);
    tab_desc1[0]["value"]="1.0";
    tab_desc1[0]["label"]="Alabama";
    tab_desc1[1]=new Array(2);
    tab_desc1[1]["value"]="2.0";
    tab_desc1[1]["label"]="Alaska";
    tab_desc1[2]=new Array(2);
    tab_desc1[2]["value"]="3.0";
    tab_desc1[2]["label"]="American Samoa";
    var myJsonString = JSON.stringify(tab_desc1);    
    var jsonData = $.parseJSON(myJsonString);

逻辑上我的声明包含错误,我无法看到它。 任何帮助!谢谢。

2 个答案:

答案 0 :(得分:2)

tab_desc1[0] = new Array(2);

应该是

tab_desc1[0] = {};

和其他人一样。

但是我不知道将变量字符串化为字符串然后再解析它的目的。

答案 1 :(得分:1)

问题是数组和对象不是一回事。

您的第一个代码会创建一个对象的数组。

您的第二个代码创建了一个 arrays 数组,但随后在这些数组上设置了非数字属性。 JS数组是一种对象,因此设置非数字属性不是错误,但stringify()只包含数字属性。你需要这样做:

var tab_desc1 = []; // Note that [] is "nicer" than new Array(3)
tab_desc1[0] = {};  // NOTE the curly brackets to create an object not an array
tab_desc1[0]["value"] = "1.0";
tab_desc1[0]["label"] = "Alabama";
tab_desc1[1] = {};  // curly brackets
tab_desc1[1]["value"] = "2.0";
tab_desc1[1]["label"] = "Alaska";
tab_desc1[2] = {};  // curly brackets
tab_desc1[2]["value"] = "3.0";
tab_desc1[2]["label"] = "American Samoa";

var myJsonString = JSON.stringify(tab_desc1);    
var jsonData = $.parseJSON(myJsonString);

你也可以这样做:

var tab_desc1 = [];
tab_desc1[0] = {"value":"1.0","label":"Alabama"};
tab_desc1[1] = {"value":"2.0","label":"Alaska"};
tab_desc1[2] = {"value":"3.0","label":"American Samoa"};

(另外,为什么要进行字符串化然后立即解析以获取相同的对象?)