【问题标题】:Unique array by object property对象属性的唯一数组
【发布时间】:2014-04-27 15:05:26
【问题描述】:

如何根据属性使对象数组唯一?在本例中,“字段”:

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

【问题讨论】:

  • make an array of objects unique 是什么意思?还有什么问题?
  • @Daniel 我的意思是“如何根据属性使对象数组唯一?”

标签: javascript jquery arrays kendo-ui kendo-grid


【解决方案1】:

您可以为此使用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()
    });
})

【讨论】:

  • 很快意识到我的方法不起作用,因为如果你先搜索然后过滤它会嵌套数组。谢谢!
【解决方案2】:

如果我理解正确,您想定义一个方法,以便在推送新元素时,它不存在。在我看来,您需要添加另一个步骤:

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

【讨论】:

  • 它需要覆盖任何现有元素,以便返回的数组具有最新值。
猜你喜欢
  • 2013-09-17
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2021-01-02
  • 2010-09-11
相关资源
最近更新 更多