JavaScript / jQuery:将项目推送到数组/对象,每个项目具有相同的键
JavaScript / jQuery: Push items to array / object with same key for each item
我使用 DataTables 并尝试动态生成“aoColumns”值,这样我就不必对它们进行硬编码。
我尝试了以下方法,但似乎是错误的。
我的猜测是我在每一行中覆盖相同的键而不是将它们附加到彼此。
谁能告诉我如何正确地做到这一点 - 考虑到键“mData”对所有值都保持不变?
预期结果:
var tableDT = $('#tblReport').dataTable({
dom: 'Bfrtip',
"bProcessing": true,
"sAjaxSource": "data.php",
"aoColumns": [
{ mData: 'col1' },
{ mData: 'col2' },
{ mData: 'col3' },
{ mData: 'col4' },
{ mData: 'col5' }
]
动态方法:
var reportColsShort = 'col1,col2,col3,col4,col5'; // for testing purposes
var aoCols = [];
for(var i = 0; i <reportColsShort.length; i++){
aoCols['mData'] = reportColsShort[i];
}
var tableDT = $('#tblReport').dataTable({
dom: 'Bfrtip',
"bProcessing": true,
"sAjaxSource": "data.php",
"aoColumns": aoCols
是的,你犯了一个小错误,你需要推送到数组,但你正在替换地图中的键。
您只需要在 for 循环中更改您的逻辑即可:
for(var i = 0; i <reportColsShort.length; i++){
aoCols.push({ 'mData' : reportColsShort[i] } );
}
然后你应该得到你想要的输出。
您还应该将 reportColsShort
变量改为数组:
var reportColsShort = 'col1,col2,col3,col4,col5'.split(",");
您想拆分字符串,而不是遍历它。然后您想遍历拆分元素的数组,并为其中的每个元素创建一个对象并将其推入数组。
var reportColsShort = 'col1,col2,col3,col4,col5';
var aoCols = [];
reportColsShort.split(',').forEach(item => {
aoCols.push({
'mData': item
})
})
console.dir(aoCols);
您需要在您的 for 循环中创建新的 JSON 对象,然后将该值推送到您的主 JSON 数组。
演示代码:
var reportColsShort = 'col1,col2,col3,col4,col5'; // for testing purposes
var aoCols = [];
var colss = reportColsShort.split(",");//split values
//if array no need of split
for (var i = 0; i < reportColsShort.split(",").length; i++) {
var aoColss = {}//decalre this
aoColss['mData'] = colss[i];//add value to json object
aoCols.push(aoColss)//push value in main json arry
}
console.log(aoCols)
使用推送。
var reportColsShort = ['col1','col2','col3','col4','col5']; // for testing purposes
var aoCols = [];
for(var i = 0; i <reportColsShort.length; i++){
aoCols.push({'mData':reportColsShort[i]})
}
如果您没有上述格式的 reportColsShort 变量,请使用拆分。
var reportColsShort = 'col1,col2,col3,col4,col5'.split(',')
我使用 DataTables 并尝试动态生成“aoColumns”值,这样我就不必对它们进行硬编码。
我尝试了以下方法,但似乎是错误的。
我的猜测是我在每一行中覆盖相同的键而不是将它们附加到彼此。
谁能告诉我如何正确地做到这一点 - 考虑到键“mData”对所有值都保持不变?
预期结果:
var tableDT = $('#tblReport').dataTable({
dom: 'Bfrtip',
"bProcessing": true,
"sAjaxSource": "data.php",
"aoColumns": [
{ mData: 'col1' },
{ mData: 'col2' },
{ mData: 'col3' },
{ mData: 'col4' },
{ mData: 'col5' }
]
动态方法:
var reportColsShort = 'col1,col2,col3,col4,col5'; // for testing purposes
var aoCols = [];
for(var i = 0; i <reportColsShort.length; i++){
aoCols['mData'] = reportColsShort[i];
}
var tableDT = $('#tblReport').dataTable({
dom: 'Bfrtip',
"bProcessing": true,
"sAjaxSource": "data.php",
"aoColumns": aoCols
是的,你犯了一个小错误,你需要推送到数组,但你正在替换地图中的键。
您只需要在 for 循环中更改您的逻辑即可:
for(var i = 0; i <reportColsShort.length; i++){
aoCols.push({ 'mData' : reportColsShort[i] } );
}
然后你应该得到你想要的输出。
您还应该将 reportColsShort
变量改为数组:
var reportColsShort = 'col1,col2,col3,col4,col5'.split(",");
您想拆分字符串,而不是遍历它。然后您想遍历拆分元素的数组,并为其中的每个元素创建一个对象并将其推入数组。
var reportColsShort = 'col1,col2,col3,col4,col5';
var aoCols = [];
reportColsShort.split(',').forEach(item => {
aoCols.push({
'mData': item
})
})
console.dir(aoCols);
您需要在您的 for 循环中创建新的 JSON 对象,然后将该值推送到您的主 JSON 数组。
演示代码:
var reportColsShort = 'col1,col2,col3,col4,col5'; // for testing purposes
var aoCols = [];
var colss = reportColsShort.split(",");//split values
//if array no need of split
for (var i = 0; i < reportColsShort.split(",").length; i++) {
var aoColss = {}//decalre this
aoColss['mData'] = colss[i];//add value to json object
aoCols.push(aoColss)//push value in main json arry
}
console.log(aoCols)
使用推送。
var reportColsShort = ['col1','col2','col3','col4','col5']; // for testing purposes
var aoCols = [];
for(var i = 0; i <reportColsShort.length; i++){
aoCols.push({'mData':reportColsShort[i]})
}
如果您没有上述格式的 reportColsShort 变量,请使用拆分。
var reportColsShort = 'col1,col2,col3,col4,col5'.split(',')