1

我想为 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 ”,我希望为数据“aTargets”获取值 [running_index_number]。

请在这件事上帮助我。先感谢您。

4

2 回答 2

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?            
    });
}
于 2012-09-07T03:50:23.470 回答
1

我建议您从for..in循环更改为标准for循环,因为迭代数组for..in是“危险的”,因为如果您使用的库添加了属性/方法,Array.prototype那么循环也将迭代这些。

此外,迭代for..ini将是一个string正在创建"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 对象字面量和数组字面量语法,但它不是一回事。)

于 2012-09-07T03:54:13.833 回答