如何遍历对象数组并将值放入过滤器?
Posted
技术标签:
【中文标题】如何遍历对象数组并将值放入过滤器?【英文标题】: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
]
);
我必须为数组中的每个项目创建一行以应用过滤器。
【问题讨论】:
那么,您对同一列同时有 几个 过滤器? 【参考方案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() ,因为会多次调用远程端点,所以总是先创建过滤器对象,然后像上面那样应用它
【讨论】:
以上是关于如何遍历对象数组并将值放入过滤器?的主要内容,如果未能解决你的问题,请参考以下文章
JS 遍历对象数组并将值更改为匹配的键并创建一个包含对象数组 [0] 中的键的新对象
vue.js 中的v-for可以将遍历出来的值放入标签属性吗