Как сделать массив объектов уникальным на основе свойства? В этом случае "поле":
0: Object
field: "name"
operator: "eq"
value: "d"
1: Object
field: "gridSearch"
operator: "contains"
value: "1"
2: Object
field: "gridSearch"
operator: "contains"
value: "12"
Для справки здесь бит кода, который я использую, когда эта проблема касается:
$('#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
для этого; поскольку вы хотите использовать это для Kendo Grid, возможно, вы могли бы сделать что-то вроде этого (пример работает только для фильтров без вложенности):
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);
}
поэтому вы можете сделать это в своем обработчике:
$('#gridSearch').keyup(function() {
var grid = $('.k-grid').first().data("kendoGrid");
grid.addOrUpdateFilter({
field: 'gridSearch',
operator: 'contains',
value: $(this).val()
});
})
Если я правильно ее понимаю, вы хотите определить метод, чтобы при нажатии новых элементов он еще не существует. Мне кажется, что вам нужно добавить еще один шаг:
var addUniqueElement = function(arr, el) {
for(var i = 0; i < arr.length; i++) {
if(arr[i].field == el.field)
return false; // This element already exists
}
// Element didn't already exist in the array
arr.push(el);
return true;
}
Тогда все, что вам нужно сделать, это вызвать addUniqueElement, а не нажимать его самостоятельно.
make an array of objects unique
? И в чем проблема?