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

Create JavaScript array (JSON format) for DataTables aoColumnDefs

本文关键字:JSON 格式 数组 JavaScript DataTables aoColumnDefs 创建      更新时间:2023-09-26

我想为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"
                            });

基于这个有用的讨论,我尝试了一个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",我希望为数据"aTarget"获得值[running_index_number]。

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

我建议您将for..in循环更改为标准的for循环,因为用for..in迭代数组是"危险的",因为如果您使用的库向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对象文字和数组文字语法,但它不是一回事。)

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?            
    });
}