1
votes

JavaScript / jQuery: pousser les éléments vers un tableau / objet avec la même clé pour chaque élément

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' }
        ]


0 commentaires

4 Réponses :


1
votes

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


1 commentaires

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.



0
votes

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


0 commentaires

1
votes

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)


0 commentaires

0
votes

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]})
    }


0 commentaires