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(',')