2016-09-23 4 views
5

Я пытаюсь сделать фильтр в угловом контроллере, который чувствителен к регистру при фильтрации массива.

Мои данные, как показано ниже:

var stoneArr = 
[ 
    { 
     "stone_name": "Diamond", 
     "id": 16 
    }, 
    { 
     "stone_name": "Ruby", 
     "id": 17 
    }, 
    { 
     "stone_name": "Sapphire", 
     "id": 18 
    }, 
    { 
     "stone_name": "Emerald", 
     "id": 19 
    } 
]; 

Мой HTML вход, как показано ниже:

<input type="text" name="stone_name" class="form-control" id="stone_name" 
ng-model="propertyName" maxlength="15" required> 

Мой фильтр в контроллере:

var stoneObj = $filter('filter')(stoneArr, {stone_name:$scope.propertyName}, true); 

Здесь ловушка в том, что, когда i введите «алмаз» в поле ввода

$scope.propertyName = "diamond"; 

фильтр не соответствует этой строке с помощью «Алмаз».

Я не хочу, чтобы удалить точное условие соответствия (истина), из уравнения, как показано ниже:

var stoneObj = $filter('filter')(stoneArr, {stone_name:$scope.propertyName}); //This won't work for me 

Это не будет работать для меня, потому что я хочу, чтобы соответствовать точной строке для фильтрации данные. И данные будут иметь уникальные значения «stone_name». Также я не хочу использовать любые циклы, так как длина массива будет превышать 1000+. В любом случае я могу достичь этого?

+0

Внутри $ фильтр делает петлю. Я бы сделал одну функцию с этим сравнением или создал другой конкретный фильтр –

ответ

3

Попробуйте использовать функцию соответствия, чтобы получить нечувствительны к регистру матч:

var stoneObj = $filter('filter')(stoneArr, function (item) { 
    return item.stone_name.toLowerCase() == $scope.propertyName.toLowerCase(); 
},true);