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

在javascript中使用字符串索引动态创建二维表,javascript,arrays,json,multidimensional-array,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(myJsonStr

我需要将一个表解析为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);
问题是,当我动态声明二维表“tab”时,它不起作用:

    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);
逻辑上我的声明包含错误,但我看不到。 任何帮助!谢谢

tab_desc1[0] = new Array(2);
应该是

tab_desc1[0] = {};
其他人也一样

但我不知道将变量字符串化为字符串然后再将其解析回来的目的

应该是

tab_desc1[0] = {};
其他人也一样


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

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

第一个代码创建一个对象数组

第二个代码创建一个数组,但随后在这些数组上设置非数值属性。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"};
您也可以这样做:

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"};

(还有,为什么要字符串化,然后立即解析以获取相同的对象?

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

第一个代码创建一个对象数组

第二个代码创建一个数组,但随后在这些数组上设置非数值属性。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"};
您也可以这样做:

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"};

(还有,为什么要字符串化然后立即解析以获取相同的对象?

您的内部维度不是数组,所以不要执行
tab\u desc1[0]=new array()
。它是一个对象(JS数组没有字符串键),因此将其创建为一个
tab_desc1[0]={}
您正在使用带字符串的数组。如果要使用字符串,请使用对象。在您的情况下,您应该同时使用数组和对象。我正在使用一个移动应用程序(jquery mobile和phoneGap),我需要它来自动完成复杂对象的搜索:可能重复“stringify()”以将数组转换为json字符串(我包括一个使用此方法的库脚本)它在第一个Delcatation的情况下运行良好您的内部维度不是数组,因此不要执行
tab\u desc1[0]=new array()
。它是一个对象(JS数组没有字符串键),因此将其创建为一个
tab_desc1[0]={}
您正在使用带字符串的数组。如果要使用字符串,请使用对象。在您的情况下,您应该同时使用数组和对象。我正在使用一个移动应用程序(jquery mobile和phoneGap),我需要它来自动完成复杂对象的搜索:可能重复“stringify()”以将数组转换为json字符串(我包括一个使用此方法的库脚本)在第一次Delcatation的情况下效果很好这是答案,恭喜!这就是答案,祝贺你!因为我从文件中读取数据,所以我应该浏览它以在数组中插入数据,然后将其解析为JSON(因为脚本需要JSON格式),因为我从文件中读取数据,所以我应该浏览它以在数组中插入数据,然后将其解析为JSON(因为脚本需要JSON格式)