J'utilise DataTables et j'essaye de générer dynamiquement les valeurs "aoColumns" pour ne pas avoir à les coder en dur.
J'ai essayé avec l'approche ci-dessous mais cela semble être faux.
Je suppose que j'écrase la même clé dans chaque ligne au lieu de l'ajouter l'une à l'autre.
Quelqu'un peut-il me montrer comment faire cela correctement - étant donné que la clé "mData" reste la même pour toutes les valeurs ?
Résultat attendu:
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
Approche dynamique:
var tableDT = $('#tblReport').dataTable({ dom: 'Bfrtip', "bProcessing": true, "sAjaxSource": "data.php", "aoColumns": [ { mData: 'col1' }, { mData: 'col2' }, { mData: 'col3' }, { mData: 'col4' }, { mData: 'col5' } ]
4 Réponses :
Oui, vous avez fait une erreur mineure, vous devez pousser vers le tableau, mais vous remplacez des clés dans votre carte.
Il vous suffit de changer votre logique dans la boucle for:
var reportColsShort = 'col1,col2,col3,col4,col5'.split(",");
et ensuite vous devriez obtenir la sortie souhaitée. Vous devriez également changer votre variable reportColsShort
dans un tableau à la place:
for(var i = 0; i <reportColsShort.length; i++){ aoCols.push({ 'mData' : reportColsShort[i] } ); }
Merci beaucoup pour cela aussi, et pour le commentaire sur la variable. Cette approche ne semble pas fonctionner pour moi et je pense qu'il manque un crochet.
Vous voulez diviser votre chaîne, pas itérer dessus. Ensuite, vous souhaitez parcourir un tableau d'éléments fractionnés et pour chacun d'entre eux, vous souhaitez créer un objet et le pousser dans le tableau.
var reportColsShort = 'col1,col2,col3,col4,col5'; var aoCols = []; reportColsShort.split(',').forEach(item => { aoCols.push({ 'mData': item }) }) console.dir(aoCols);
Vous devez créer un nouvel objet JSON dans votre boucle for, puis pousser cette valeur dans votre tableau JSON principal.
Code démo :
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)
Utilisez push.
var reportColsShort = 'col1,col2,col3,col4,col5'.split(',')
Si vous n'avez pas la variable reportColsShort dans le format ci-dessus, utilisez split.
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]}) }