我想为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]。
请在这件事上帮助我。提前谢谢。
答案 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对象文字和数组文字语法,但它不是一回事。)