2014-04-27 158 views
0

如何根据属性使对象数组唯一?在这种情况下,“场”:按对象属性的唯一数组

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) 
}) 
+0

你是什​​么意思'使一组对象唯一'?问题是什么? – Daniel

+0

@Daniel我的意思是“我如何根据属性制作一个唯一的对象数组?” – imperium2335

回答

0

您可以使用jQuery.extend为此;因为你想用这个了剑道电网,也许你可以做这样的事情(例如仅适用于过滤器没有嵌套):

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() 
    }); 
}) 
+0

很快意识到我的方法不工作,因为如果你先搜索然后过滤它将嵌套数组。谢谢! – imperium2335

0

如果我理解正确的话,你要定义一个方法,以便在推送新元素时它不存在。这听起来像你对我需要添加另一个步骤:

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。

+0

它需要重写所有现有元素,以便返回的数组具有最新值。 – imperium2335