如何遍历对象数组并将值放入过滤器中

How can I iterate through an object array and place values into a filter?

本文关键字:过滤器 数组 何遍历 遍历 对象      更新时间:2024-02-09

我正在使用剑道ui网格来显示数据。我能够获得我想在对象阵列中使用的过滤器

Object {logic: "and", filters: Array[3]}
filters:Array[3]
0:Object
    field:"CheckDate"
    operator:"gte"
    value:Fri Jan 01 2016 00:00:00 GMT-0500 (Eastern Standard Time)
1:Object
    field:"CheckDate"
    operator:"lte"
    value:Tue Jan 31 2017 00:00:00 GMT-0500 (Eastern Standard Time)

我不明白的是如何在这个数组中循环,并将过滤器中的值用于剑道网格。过滤器代码如下所示:

   grid.dataSource.filter({
            logic: "and",
            filters: [
            { field: "EmployeeName", operator: "contains", value: val }
        ]
    });

我必须为数组中的每个项目画一行来应用过滤器。

您是否要求for ... in语句?如果顺序不重要,我会使用它。

for (var val in yourObject.filters){
   grid.dataSource.filter({
            logic: "and",
            filters: [
            { field: val[0], operator: val[1], value: val[2] }
        ]
    });
};

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

Javascript for ... in的行为如果你习惯于编写C#或Java代码,那就非常奇怪了,所以我更喜欢使用jQuery.each,它的行为正如我所期望的那样。

$.each(yourObject.filters, function(index, element){
   grid.dataSource.filter({
            logic: "and",
            filters: [
                { field: element[0], operator: element[1], value: element[2] }
            ]
    });
});

对象Object {logic: "and", filters: Array[3]}的结构实际上是kendo数据源所期望的过滤。然而,要手动执行此操作,您可以尝试以下操作,

var generateFilterArray = function (yourFilterObject) {
    var filters = []
    for (var i = 0; i < yourFilterObject.filters.length; i++) {
            filters.push({
                field: yourFilterObject.filters[i].field,
                operator: yourFilterObject.filters[i].operator,
                value: yourFilterObject.filters[i].value
            });            
    }
    return {
        logic: yourFilterObject.logic,
        filters: filters
    };
}
grid.dataSource.filter(generateFilterArray(yourFilterObject))

最后,记住不要在循环中调用grid.dataSource.filter(),因为它会多次调用远程端点,所以总是先创建filter对象,然后像上所做的那样应用它