根据数组生成DataTables列变量

时间:2016-05-24 13:02:04

标签: javascript arrays datatables

背景
我正在忙着建立一个应用程序(其中包括)必须能够显示报告。我之所以选择DataTables是因为它的工作非常棒而且很容易实现。我已经创建了一个基于一个(静态)数据集的应用程序。但是,我已经请求更改应用程序以便能够使用多个数据集。

问题:
Amonst其他的东西,我想用变量替换静态定义的列(请参阅代码片段)。在这种情况下,一个带有id, keten, name, x, y的数组,将在其他地方动态声明。

如何更改我的函数以合并变量数组而不是硬编码列?

最终结果应该从

改变
"columns": [
    {"data": "id"},
    {"data": "keten"},
.......

类似

"columns": [
    {"data": *variableReportData*}

代码:

function rapport_vullen(){
    $("#rapport").dataTable({
        destroy: true,
      "aaData": geojson.features.map(function(row) { return row.properties; }),
        "columns": [
            {"data": "id"},
            {"data": "keten"},
            {"data": "name"},
            {"data": "x"},
            {"data": "y"}
        ]
    });
    download_rapport()
};

2 个答案:

答案 0 :(得分:1)

您可以使用.map()将列名数组转换为对象数组,如下所示:

var inputArray = ["a","b","c"]; // for example
inputArray.map(function(d) { return {data:d}; });

所以I / O将是:

["a","b","c"] --> [{data:"a"},{data:"b"},{data:"c"}]

然后使用输出创建DataTable。

function rapport_vullen(inputArray){
    $("#rapport").dataTable({
        destroy: true,
        aaData: geojson.features.map(function(row) { return row.properties; }),
        columns: inputArray.map(function(d) { return {data:d}; })
    });
    download_rapport()
}

答案 1 :(得分:1)

您可以使用javascript .map()功能:

它会根据需要将数组元素转换为对象。

var arr = [id, keten, name, x, y];

var objArr = arr.map(function(item) { return {data:item} });

的console.log(objArr);

 [{"data": "id"},
  {"data": "keten"},
  {"data": "name"},
  {"data": "x"},
  {"data": "y"}]

然后,您可以直接在数据表函数中使用它。感谢