2016-09-23 33 views
5

Tôi đã cố gắng tạo bộ lọc trong bộ điều khiển góc có phân biệt chữ hoa chữ thường trong khi lọc mảng.

dữ liệu của tôi là như sau:

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

đầu vào HTML của tôi là như sau:

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

lọc của tôi trong bộ điều khiển là:

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

Ở đây cái bẫy là khi tôi nhập "kim cương" vào trường nhập

$scope.propertyName = "diamond"; 

bộ lọc không khớp với chuỗi này bằng "Kim cương".

Tôi không muốn để loại bỏ các điều kiện đối sánh chính xác (true) từ phương trình như hình dưới đây:

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

này sẽ không làm việc cho tôi, bởi vì tôi muốn để phù hợp với chuỗi chính xác để lọc dữ liệu. Và dữ liệu sẽ có các giá trị "stone_name" duy nhất. Ngoài ra tôi không muốn sử dụng bất kỳ vòng kể từ khi chiều dài mảng sẽ đi trên 1000+. Có anyway tôi có thể đạt được điều này?

+0

Bên trong $ lọc thực hiện một vòng lặp. Tôi sẽ làm một chức năng duy nhất với so sánh đó, hoặc để tạo một bộ lọc cụ thể khác –

Trả lời

3

Hãy thử sử dụng một chức năng phù hợp để có được trường hợp trận đấu nhạy cảm:

var stoneObj = $filter('filter')(stoneArr, function (item) { 
    return item.stone_name.toLowerCase() == $scope.propertyName.toLowerCase(); 
},true); 
Các vấn đề liên quan