2016-09-23 7 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); 

入力欄に「diamond」と入力する

$scope.propertyName = "diamond"; 

フィルタはこの文字列を「ダイヤモンド」と一致させません。

私は下記のように式から完全一致条件(真)を削除したくない

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

私はフィルターに正確な文字列にマッチさせたいので、これは、私のために動作しません。データ。データには固有の "stone_name"値があります。また、配列の長さが1000以上になるので、私はループを使用したくありません。とにかく私はこれを達成することができますか?

+0

内部で$フィルタがループを行います。私は、その比較で単一の機能を実行するか、別の特定のフィルタを作成します –

答えて

3

は大文字小文字を区別しないマッチングを取得するにはmatch関数を使用してみてください:

var stoneObj = $filter('filter')(stoneArr, function (item) { 
    return item.stone_name.toLowerCase() == $scope.propertyName.toLowerCase(); 
},true); 
関連する問題