首页 > 编程语言 > 详细

js中文首字母排序(二)

时间:2015-11-16 19:39:45      阅读:843      评论:0      收藏:0      [点我收藏+]

前面写了一篇 js中文首字母排序(一)

文章主要是应用过来js的两个方法,sort()和 localeCompare()

但使用两个方法进行排序会出现一些问题,可用性不高

由于最近刚好需要实现一个功能点,在移动端实现通讯录的名称排序功能,即要实现,各字段要按照中文首字母在ascii表中的顺序分类并从上到下排列好(吐槽下:现在对前端的要求的技术越来越多了,希望大前端越来越好)

研究了两天,在网上找了不少资料(感谢前辈们的无私奉献),用了另外一种解决方案

使用整理好的Unicode编码对照表(非本人整理)行排序

实现思路是按照中文字符在Unicode中的编码对应对照表中的字母进行转换,再根据ascii码表进行排序,测试过可实现需求

下面发一个移动端的排序demo(需要对照表请留邮箱

html:

<!DOCTYPE html>
<html>
<head>
    <title>排序</title>
    <meta charset="UTF-8"> </meta>
    <meta author="alex">
    <meta name="viewport" content="width=device-width, initial-scale=1" /> 
</head>
<body>
    <ul id="list"></ul>
    <script src="js/jquery-1.11.2.min.js" type="text/javascript"></script>
    <script src="js/sortUnicode.js" type="text/javascript"></script>
    <script src="js/sort.js" type="text/javascript"></script>
    <script>
            $.sort({        //调用sort并传入排序字符串数组,注意格式
                str : ["小龙女","杨过","郭靖","独孤求败","黄蓉","欧阳锋","洪七公","王重阳","一灯","黄药师","梅超风","陆无双","程英","李莫愁","穆念慈","金轮法王"]              

         //传入排序字符串 //功能未完善,待开发 }); </script> </body> </html>

 

css:

<style>
body{margin:0;padding:0}
#list{padding:0 2%;list-style-type:none}
#list li{border:1px solid #dfdfdf;height:2em;line-height:2em;padding-left:2%}
#list .listTitle{background-color:#adadad;color:#fff}
#list .listCon:hover{background-color:#c2c2c2}
#list .listCon{color:#000}
</style>

 

js:

/*
 * author:alex
 * updateTime:2015-11-12
 * 中文排序1.0
 */
(function ($) {
    $.sort = function(options) { 
        var dft = {
            str : []
        };
        var obj = $.extend(dft,options);
        
        //判断首字母数组
        var pinYin = executive(obj.str);        //    得到一串首字母数组
        var arry = [];
        for(var i=0;i<pinYin.length;i++){
            arry[i]=pinYin[i];
        }
        var temp;
        var listLi="";
        function executive(str){
            var isEnglishOrNum =  /^[A-Za-z0-9]+$/;            //正则验算是否英文字母或数字
            var arr = [];        //存储各字符串首字母
            var j = 0;
            for(var i=0;i<str.length;i++){
                if(Object.prototype.toString.call(str[i]) === "[object String]"){        //判断是否为字符串
                    var sing = str[i].substring(0,1);    //截取字符串首个字符
                    var ch = str[i].charCodeAt(0);        //获取字符对应Unicode编码值
                    if(isEnglishOrNum.test(sing)){        //判断是否为英文字母或数字
                        arr[j++] = sing.toUpperCase();        //是则将字符赋值给数组
                    }else{
                        
                        if(ch<40869&&ch>19968){            //判断字符编码值在19968到40869之间
                            arr[j++]=strChineseFirstPY.charAt(ch-19968);            //获取对应表中的字母并赋值到数组        
                        }else{
                            alert("字符串首字母仅支持字母和数字");
                            return false;
                        }
                    }
                }else{
                    alert("请检查您输入的字符串数组是否有误");
                    return false;
                }
            }
            return arr;
        }
        for(var i=0;i<pinYin.length-1;i++){            //将出现的字符按ascii顺序由小到大存进数组
            for(var j=0;j<pinYin.length-1-i;j++){
                    if(pinYin[j]>pinYin[j+1]){
                            temp = pinYin[j];
                            pinYin[j] = pinYin[j+1];
                            pinYin[j+1] = temp;
                    }
            }
        } 
        for(var i=0;i<pinYin.length;i++){        //生成拥有的字符
                if(pinYin[i]!=pinYin[i-1]){
                    listLi += "<li id=‘"+pinYin[i]+"‘ class=‘listTitle‘><b>"+pinYin[i]+"</b></li>";
                }
        }
        $("#list").html(listLi);
        for(var i=0;i<obj.str.length;i++){            //将各字段放进相应的字符区间
                var li = "<li class=‘listCon‘>"+obj.str[i]+"</li>";
                $("#"+arry[i]+"").after(li);
        }
    }
})(jQuery);

效果图:

技术分享

js中文首字母排序(二)

原文:http://www.cnblogs.com/alex-web/p/4969676.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!