angular,过滤掉两个参数的唯一组合

angular, filter out unique combinations of two parameters

是否可以使用两个条件过滤 unique 的数组?

而不是这个:

<ion-item collection-repeat="item in data | unique:{'model'}"></ion-item>

我只想过滤两个参数的唯一组合:

<ion-item collection-repeat="item in data | unique:{['brand','model']}"></ion-item>

例如我需要过滤器保留:

brand: 'Matta'  model: 'gravy'
brand: 'CI'  model: 'gravy'

但要删除这两个中的一个:

brand: 'Matta'  model: 'gravy'
brand: 'Matta'  model: 'gravy'

您始终可以对过滤器进行管道传输,所以试试这个:

<ion-item collection-repeat="item in data | unique:{'brand'} | unique:{'model'}"></ion-item>

第一个过滤器采用第一个数组并输出一个应用了过滤器的数组。第二个过滤器使用第一个过滤器的输出并执行相同的操作。结果是应用了两个过滤器的数组。

编辑: 要获得独特的组合,您可以使用像这样的自定义过滤器:

app.filter('filterObj', filterObj);

function filterObj() {
  return function(collection, properties) {
    var trace = [];
    angular.forEach(collection, function(item) {
      for (var i = 0; i < trace.length; i++) {
         if (equalsPartial(item, trace[i], properties))
           return;
      }
      trace.push(item);
    });
    return trace;
  }

    function equalsPartial(item,traceItem,properties){
        for (var j = 0; j < properties.length; j++) {
          if (item[properties[j]] !== traceItem[properties[j]])
            return false;
        }
      return true;
    }
}

然后你使用它:

<ion-item collection-repeat="item in data | filterObj: ['brand','model']"></ion-item>

过滤器在检查新数组是否已包含共享相同属性的项目后将项目添加到新数组,如果存在则不执行任何操作,否则添加它。 您也可以将 equalsPartial 函数放入另一个过滤器中。

CodePen