angular filter 排序姓名为什么「周」会排在前面?

angular.module('app',[]);
//service 
app.service('memberService', function($scope, $filter){
    this.filterMembers = function(members) {
        members = members || [];
        var onlineMembers = [];
        var offlineMembers = [];
        for(let i=0;i<members.length;i++) {
            if(members[i].isOnline == "true") {
                onlineMembers.push(members[i]);
            } else {
                offlineMembers.push(members[i]);
            }
        }
        var filteredMembers = ($filter('orderBy')(onlineMembers,'name')).concat($filter('orderBy')(offlineMembers,'name'));
        return filteredMembers;
    }
});

//controller
app.controller('ctrl', function($scope, memberService){
    $scope.members = [
        {
          "name":"郑尊",
          "career": "打杂"
        },{
          "name":"孟峰",
          "career": "打杂"
        },{
          "name":"周销",
          "career": "打杂"
        },{
          "name":"周周",
          "career": "打杂"
        },{
          "name":"欧阳",
          "career": "打杂"
        }
    ];
    $scope.filteredMembers = memberService.filterMembers($scope.members);
})

//最终排序为什么「周」在前面呢?
==>
周周
周销
孟峰
欧阳
郑尊
阅读 3.1k
2 个回答

按照 UTF-16 编码排序所以存在这个问题。
可以考虑用 sort-by-pinyin 进行排序,它会把汉子猜测出拼音,再通过拼音首字母排序。

'周'.charCodeAt(0) //21608
'孟'.charCodeAt(0) //23391
'欧'.charCodeAt(0) //27431
'郑'.charCodeAt(0) //37073
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题