2014-04-27 156 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