按对象属性的唯一数组 [英] Unique array by object property
本文介绍了按对象属性的唯一数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何根据属性使对象数组唯一?在这种情况下,字段":
How do I make an array of objects unique based on a property? In this instance, "field":
0: Object
field: "name"
operator: "eq"
value: "d"
1: Object
field: "gridSearch"
operator: "contains"
value: "1"
2: Object
field: "gridSearch"
operator: "contains"
value: "12"
作为参考,这是我在解决此问题时所使用的一些代码:
For reference here is the bit of code I'm using where this problem is concerned:
$('#gridSearch').keyup(function() {
var currentFilters = $('.k-grid').data("kendoGrid").dataSource.filter();
currentFilters.filters.push({
field: 'gridSearch',
operator: 'contains',
value: $(this).val()
})
console.log(currentFilters.filters)
})
推荐答案
您可以使用 jQuery.extend
为此;由于您想将其用于剑道网格,因此您可以执行以下操作(示例仅适用于没有嵌套的过滤器):
You can use jQuery.extend
for this; since you want to use this for a Kendo Grid, maybe you could do something like this (example only works for filters without nesting):
kendo.ui.Grid.fn.addOrUpdateFilter = function (filter) {
var filterConfig = this.dataSource.filter(),
filters,
isNewFilter = true;
if (filterConfig) {
filters = filterConfig.filters;
for (var i = 0; i < filters.length; i++) {
if (filters[i].field === filter.field) {
// there already was a filter for this field, so update it
$.extend(filters[i], filter);
isNewFilter = false;
}
}
} else {
filters = [];
}
// there was no filter for this field, so add it
if (isNewFilter) {
filters.push(filter);
}
this.dataSource.filter(filters);
}
因此您可以在处理程序中执行此操作:
so you could do this in your handler:
$('#gridSearch').keyup(function() {
var grid = $('.k-grid').first().data("kendoGrid");
grid.addOrUpdateFilter({
field: 'gridSearch',
operator: 'contains',
value: $(this).val()
});
})
这篇关于按对象属性的唯一数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文