为什么我的排序过滤器对除字母 "m?" 以外的所有内容都有效

Why would my sort filter work for everything but the letter "m?"

我在 AngularJS 中创建了一个小过滤器应用程序,它的工作原理是,当我输入一个字母时,它会在 table 中找到包含该字母的所有内容。例如,如果我键入一个 "s",那么我会得到其中包含 "s" 的所有名称。为什么有些字母,比如字母 "m" 根本不起作用?有人可以告诉我如何更改此设置以便所有字母都有效吗?非常感谢。

HTML

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>The Sort Filter</title>
    <link href="content/css/styles.css" rel="stylesheet" type="text/css" />
    <script src="app\lib\angular.min.js"></script>
    <script src="app\app.js"></script>

  </head>
  <body ng-app="myApp">
    <div ng-controller="myController">
        <input type="text" ng-model="search" />
        <table>
            <thead>
                <tr>
                    <th>Firstname</th>
                    <th>Lastname</th>
                    <th>Gender</th>
                    <th>Salary</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="employee in employees | orderBy: 'lastName' | filter: search"{{employee.lastName}}">
                    <td>{{ employee.firstName}}</td>
                    <td>{{ employee.lastName}}</td>
                    <td>{{ employee.gender}}</td>
                    <td>{{ employee.salary}}</td>
                </tr>
            </tbody>
        </table>
    </div>
  </body>
</html>

JS

angular.module("myApp", [])
    .controller("myController", function ($scope) {
        //array of objects
        {var employees = [
{firstName: "David", lastName: "Hastings", gender: "Male", salary: 55000},
{firstName: "Sarah", lastName: "Smith", gender: "Female", salary: 56000},
{firstName: "Mark", lastName: "Schydinger", gender: "Male", salary: 45000},
{firstName: "Pam", lastName: "Yerace", gender: "Female", salary: 70000},
{firstName: "Todd", lastName: "Barber", gender: "Male", salary: 50000},
{firstName: "Maria", lastName: "Randall", gender: "Female", salary: 59000},
{firstName: "Amanda", lastName: "Quinn", gender: "Female", salary: 68000},
{firstName: "James", lastName: "Stewart", gender: "Male", salary: 62000},
{firstName: "Rachel", lastName: "Dowd", gender: "Female", salary: 57000},
{firstName: "Keith", lastName: "Cameron", gender: "Male", salary: 56500},
{firstName: "Carol", lastName: "Marshall", gender: "Female", salary: 62000},
{firstName: "Peter", lastName: "Buckland", gender: "Male", salary: 60000},
{firstName: "Diana", lastName: "Murray", gender: "Female", salary: 73000},
{firstName: "Dylan", lastName: "Hamilton", gender: "Male", salary: 61000},
{firstName: "Caroline", lastName: "Clark", gender: "Female", salary: 62000},
{firstName: "Cletus", lastName: "Bones", gender: "Male", salary: 60000},
{firstName: "Judy", lastName: "Charleton", gender: "Female", salary: 64000}
]};
$scope.employees = employees;

        });

它确实有效。 "m" returns 所有数据因为 "Male" 和 "Female"。如果您只想按名字和姓氏进行过滤,则必须创建自己的自定义过滤器。例如:

https://jsfiddle.net/fa0coq4e/

在视图中:

<tr ng-repeat="employee in employees | orderBy: 'lastName' | myFilter: search">

和过滤器:

filter('myFilter', function() {
  return function(array, search) {      
    if (search !== undefined && search.length > 0) {        
      var new_array = [];        
      for (var i = 0; i < array.length; i++) {
        if (array[i].firstName.toLowerCase().indexOf(search.toLowerCase()) > -1 
         || array[i].lastName.toLowerCase().indexOf(search.toLowerCase()) > -1)
          new_array.push(array[i]);
      }        
      return new_array;
    } else {
      return array;
    }
}});