Javascript jQuery DataTables—重构代码以删除';AO列';复制品

Javascript jQuery DataTables—重构代码以删除';AO列';复制品,javascript,jquery,datatables,Javascript,Jquery,Datatables,我使用jQueryDataTables来呈现时间线,每列代表一天。我有一个方法,在呈现每一列(天)并从数组中传入日期时调用该方法 有没有更好的方法来编写下面的代码,这样我就不会重复自己7次,同时仍然能够传递数组项?我看不到文件中有什么突出的地方 dataTable = $('#example').dataTable({ "bRetrieve":true, "bProcessing":true, "aaData": data, // DataTables requires a render fun

我使用jQueryDataTables来呈现时间线,每列代表一天。我有一个方法,在呈现每一列(天)并从数组中传入日期时调用该方法

有没有更好的方法来编写下面的代码,这样我就不会重复自己7次,同时仍然能够传递数组项?我看不到文件中有什么突出的地方

dataTable = $('#example').dataTable({
"bRetrieve":true,
"bProcessing":true,
"aaData": data,
// DataTables requires a render function for each column (day)
"aoColumns":[
    {
        "mData":null,
        "fnRender":function (obj) {
            return day(obj, week[0]);
        }
    },
    {
        "mData":null,
        "fnRender":function (obj) {
            return day(obj, week[1]);
        }
    },
    {
        "mData":null,
        "fnRender":function (obj) {
            return day(obj, week[2]);
        }
    },
    {
        "mData":null,
        "fnRender":function (obj) {
            return day(obj, week[3]);
        }
    },
    {
        "mData":null,
        "fnRender":function (obj) {
            return day(obj, week[4]);
        }
    },
    {
        "mData":null,
        "fnRender":function (obj) {
            return day(obj, week[5]);
        }
    },
    {
        "mData":null,
        "fnRender":function (obj) {
            return day(obj, week[6]);
        }
    }
]

}))

下面是一个简单的解决方案,使用:


在上面的代码中,
Array(7)
创建一个由七个元素组成的稀疏数组(索引
0
6
),所有元素都设置为
未定义
。然后,
$.map()
从该数组中的索引中投影对象文本。结果是一个对象文本数组,第二个参数为
day()
,随当前索引而变化。

下面是一个简单的解决方案,使用:


在上面的代码中,
Array(7)
创建一个由七个元素组成的稀疏数组(索引
0
6
),所有元素都设置为
未定义
。然后,
$.map()
从该数组中的索引中投影对象文本。结果是一个对象文本数组,第二个参数为
day()
,随当前索引而变化。

太棒了,谢谢!我应该想到这一点。我没有提到的一件事是,在这些动态列之前,它是一个普通列,不调用方法或具有fnRender属性。我是否应该将数组增加1并检查索引是否为0?或者我可以在地图前面加上吗?@user,这个方法可以帮你。您可以编写类似于aoColumns:[yourFirstColumn].concat($.map(…))的内容。在这种情况下,您可能必须指定
天(obj,week[index+1])
,这取决于您的索引工作方式。太棒了,谢谢!我应该想到这一点。我没有提到的一件事是,在这些动态列之前,它是一个普通列,不调用方法或具有fnRender属性。我是否应该将数组增加1并检查索引是否为0?或者我可以在地图前面加上吗?@user,这个方法可以帮你。您可以编写类似于aoColumns:[yourFirstColumn].concat($.map(…))的内容。在这种情况下,您可能必须指定
day(obj,week[index+1])
,具体取决于索引的工作方式。
dataTable = $("#example").dataTable({
    bRetrieve: true,
    bProcessing: true,
    aaData: data,
    aoColumns: $.map(Array(7), function(value, index) {
        return {
            mData: null,
            fnRender: function(obj) {
                return day(obj, week[index]);
            }
        };
    })
});