为DataTables aoColumnDefs创建JavaScript数组(JSON格式)

时间:2012-09-07 03:43:00

标签: javascript json datatables

我想为DataTables参数aoColumnDefs创建以下JSON数据:

var aryJSONColTable = [
                        {"sTitle": "Column00", "aTargets": [0]},
                        {"sTitle": "Column01", "aTargets": [1]},
                        {"sTitle": "Column02", "aTargets": [2]},
                        {"sTitle": "Column03", "aTargets": [3]}
                      ]

然后我将变量放入我的DataTable变量声明中,如下所示:

var oTable = $('#report').dataTable({
                                "aoColumnDefs": aryJSONColTable,
                                "bProcessing": true,
                                "bServerSide": true,
                                "bLengthChange": true,
                                "bFilter": true,
                                "aaSorting": [[ 3, "desc" ]],
                                "sScrollX": "100%",
                                "bScrollCollapse": true,
                                "bJQueryUI": true,
                                "sAjaxSource": "./getDataEA.php"
                            });

基于this useful discussion,我尝试了一个JavaScript循环来创建JSON数据aryJSONColTable,如下所示:

//create JSON array for aoColumnDefs
var aryColTableChecked = ["column00", "column01", "column02", "column03"];
var aryJSONColTable = [];

for (var i in aryColTableChecked) {
    aryJSONColTable.push({
                      "sTitle": aryColTableChecked[i],
                      "aTargets": [i]
                    });
};

对于来自JavaScript循环的数据“aTargets”,我总是得到值“1”,我希望获得数据“aTargets”的值[running_index_number]。

请在这件事上帮助我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

for...in用于不是数组的对象,aryColTableChecked是数组。你可以这样做:

var arr = [];
var max = 3; // zero based
for (var i = 0, n; i <= max; i++) {
    n = i > 9 ? '' + i : '0' + i; // make sure it has 2 digits
    arr.push({
        sTitle: 'Column' + n,
        aTargets: [i] // why array here?            
    });
}

答案 1 :(得分:1)

我建议您从for..in循环更改为标准for循环,因为使用for..in迭代数组是&#34;危险&#34;因为如果您正在使用一个向Array.prototype添加属性/方法的库,那么循环也会迭代这些。

此外,使用for..in迭代器i将是字符串创建"aTargets" : ["0"],并且您希望它是一个创建"aTargets" : [0]的数字。

var aryColTableChecked = ["column00", "column01", "column02", "column03"];
var aryJSONColTable = [];

for (var i = 0; i <  aryColTableChecked.length; i++) {
    aryJSONColTable.push({
                      "sTitle": aryColTableChecked[i],
                      "aTargets": [i]
                    });
};

似乎工作正常:http://jsfiddle.net/nnnnnn/Ek8tr/

注意:您正在制作的是而不是JSON ,它是一个对象数组。 (JSON是一种始终是字符串的数据交换格式。 JSON看起来像JS对象文字和数组文字语法,但它不是一回事。)