【问题标题】:How can I iterate through an object array and place values into a filter?如何遍历对象数组并将值放入过滤器?
【发布时间】:2016-07-27 01:25:25
【问题描述】:

我正在使用 kendo 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 }
        ]
    });

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

【问题讨论】:

  • 那么,您对同一列同时有 几个 过滤器?

标签: javascript arrays kendo-ui kendo-grid


【解决方案1】:

您要求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

【讨论】:

    【解决方案2】:

    如果您习惯于编写 C# 或 Java 代码,Javascript for ... in 的行为会非常奇怪,因此我更喜欢使用 jQuery.each,它的行为与我预期的一样。

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

    【讨论】:

      【解决方案3】:

      对象Object {logic: "and", filters: Array[3]}的结构其实就是kendo datasource期望做的过滤。但是,要手动执行此操作,您可以尝试以下操作,

      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() ,因为会多次调用远程端点,所以总是先创建过滤器对象,然后像上面那样应用它

      【讨论】:

        猜你喜欢
        • 2023-01-25
        • 2016-12-08
        • 2020-10-23
        • 2020-07-19
        • 1970-01-01
        • 2018-10-12
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多