小程序中英文混合排序问题

小程序中英文混合排序问题

在开发一个手机联系人列表的功能时,遇到需求是需要将联系人列表按照拼音顺序排序。而联系人列表是会出现中英文混合的情况。于是遇到了问题。

  1. 小程序无法直接中文进行排序
  2. localeCompare函数排序出来的结果不正确

在遇到这个问题的时候,也去网上查过不少,本来觉得比较好用的就是例佣localeCompare函数去进行排序。但是在实际开发的时候发现该函数的排列结果跟网上的不同。(大概是h5跟小程序的区别吧,我也不是很了解~)

最终参考了字母表的方式,采取了类似的做法来实现我的需求,代码如下

    /* 返回拼音的首字母大写 */
    getCName(_char) {
        if (_char <= 'z' && _char >= 'A') {
            return _char.toUpperCase();
        }
        for (var item in pinyin) {
            if (pinyin[item].indexOf(_char) != -1)
                return item[0].toUpperCase();
        }
    },
        /* 对二维数组排序,并返回处理完逻辑的结果 */
    sortTwoArr(arr) {
        let res_arr=[];
        for (var j = 0; j < arr.length; j++) {
            for (var i = 0; i < arr.length - 1; i++) {
                if (arr[i+1][0] < arr[i][0]) {
                    let temp = arr[i][0];
                    arr[i][0] = arr[i+1][0];
                    arr[i+1][0] = temp;
                    
                    let temp_ = arr[i][1];
                    arr[i][1] = arr[i+1][1];
                    arr[i+1][1] = temp_;
                }
            }
        }
        
        arr.forEach((item)=>{
            res_arr.push(item[1])
        })
        return res_arr;
    }

在onLoad()函数调用

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function(options) {
        let arr = ['猫', '狐狸', '鸟', '大雁', 'A','彦杰','燕','朕成功','陈奕迅'];
        let arr1 = [];
        arr.forEach((item, index) => {
            var _char = item.substr(0, 1);
            let temp = [this.getCName(_char), item]
            arr1.push(temp);
        })
        console.log(this.sortTwoArr(arr1))
    },

1276320-20190321150414264-734954788.png

转载于:https://www.cnblogs.com/w53064/p/10571768.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值