按对象属性的唯一数组

如何根据属性创建唯一的对象数组? 在这个例子中,“字段”:

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 ; 既然你想将它用于一个剑道网格,也许你可以做这样的事情(例子只适用于没有嵌套的filter):

 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而不是自己推送它。