Cómo hacer que ng-repeat filtre resultados duplicados

Resuelto JVG asked hace 11 años • 16 respuestas

Estoy ejecutando un archivo simple ng-repeatsobre un archivo JSON y quiero obtener nombres de categorías. Hay alrededor de 100 objetos, cada uno de los cuales pertenece a una categoría, pero sólo hay alrededor de 6 categorías.

Mi código actual es este:

<select ng-model="orderProp" >
  <option ng-repeat="place in places" value="{{place.category}}">{{place.category}}</option>
</select>

El resultado son 100 opciones diferentes, en su mayoría duplicadas. ¿Cómo uso Angular para comprobar si {{place.category}}ya existe y no crear una opción si ya existe?

editar: En mi javascript, $scope.places = JSON datasolo para aclarar

JVG avatar Apr 10 '13 07:04 JVG
Aceptado

Puede usar el filtro único de AngularUI (código fuente disponible aquí: Filtro único de AngularUI ) y usarlo directamente en ng-options (o ng-repeat).

<select ng-model="orderProp" ng-options="place.category for place in places | unique:'category'">
    <option value="0">Default</option>
    // unique options from the categories
</select>
jpmorin avatar Apr 11 '2013 04:04 jpmorin

O puedes escribir tu propio filtro usando lodash.

app.filter('unique', function() {
    return function (arr, field) {
        return _.uniq(arr, function(a) { return a[field]; });
    };
});
Mike Ward avatar Mar 19 '2014 20:03 Mike Ward