数组中的汉字依拼音顺序进行排序

为了实现类似微信通讯录的效果,需要按汉字拼音顺序依次排序显示,在网上查找了相关方法后,根据自己需求做出相应修改,下面贴上代码:

  

var pySegSort=(arr) =>{ // 汉字拼音排序
    if (!String.prototype.localeCompare) return null
    let letters = ‘abcdefghjklmnopqrstwxyz‘.split(‘‘)
    let zh = ‘阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀‘.split(‘‘)
    let segs = [],other = { letter: ‘#‘,data:[] }
    letters.forEach((v, i) => {
        let cur = { letter: v.toUpperCase(), data: [] }
        arr.forEach((item) => {
            if(/^[\u4e00-\u9fa5a-zA-Z]/g.test(item)){ // 判断是否能根据字母匹配
                if(item.localeCompare(zh[i])>=0&&item.localeCompare(zh[i+1])<0){
                    cur.data.push(item)
                }
            }else if(other.data.indexOf(item) < 0){
                other.data.push(item)
            }
        })
        if (cur.data.length) {
            cur.data.sort(function(a, b) {
                return a.localeCompare(b, ‘zh‘)
            })
            segs.push(cur)
        }
    })
    if(other.data.length){ // 若包含未匹配拼音排序的加到最后一项
        segs.push(other)
    }
    return segs
}

其中主要函数localeCompare用于比较字符串,换算规则暂时没有深入研究,将匹配出来的字段存放到另一数组中并排序,最后在与未匹配字段的数组合并后返回。返回结果格式:[{"letter":"A","data":[""]},{"letter":"B","data":[""]}]

原文地址:https://www.cnblogs.com/neeter/p/11978634.html

时间: 2024-08-29 12:28:04

数组中的汉字依拼音顺序进行排序的相关文章

C#编程入门--将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符

将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 #region 将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 /// <summary> /// 将指定字符串中的汉字转换为拼音缩写,其中非汉字保留为原字符 /// </summary> /// <param name="text"></param> /// <returns></returns> public static string G

程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】

转!http://blog.csdn.net/dabusideqiang/article/details/38271661 11.求旋转数组的最小数字 题目:输入一个排好序的数组的一个旋转,输出旋转数组的最小元素. 分析:数组的旋转:把一个数组最开始的若干个元素搬到数组的末尾.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.这道题最直观的解法并不难.从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N).但这个思路没有利用输入数组

vue 根据数组中某一项的值进行排序

一.前言 我在vue项目中遇到了一个表格排序的需求,根据某一项的值的大小从大到小调整数组顺序. 二.代码 表格大概是这个样子,样式和图片在代码中简化了. <table class="recommend_table" cellspacing="0"> <tr> <th>股票</th> <th @click="sort('in_price')">入选价</th> <th @

将数组中的字符按出现次数多少排序输出

原题 一个有N个元素的集合,其中有相同元素. 需要得到按重复元素多少排序的新集合. 输入  {"a","b","c","c","a","c"} 输出  {"c","a","b"} 求算法 import java.util.ArrayList; import java.util.Collections; import java.u

java语言插入数组中一个数,仍然能够实现排序

package com.llh.demo; import java.util.Scanner; /** * * @author llh * */ public class Demo16 { /* * 插入数组中一个数,仍能排序 */ public static void main(String[] args) { int []arr={100,70,50,30,10,0}; int []bb=new int[arr.length+1]; System.out.print("请输入你要插入的数字:

mysql数据库中查询汉字的拼音首字母

本人提供的方法有如下特点: 1.代码精简,使用简单,只要会基本的SQL语句就行2.不用建立mysql 函数等复杂的东西3.汉字库最全,可查询20902个汉字方法如下:1.建立拼音首字母资料表Sql代码:(最好再加上主键和索引) DROP TABLE IF EXISTS `pinyin`; CREATE TABLE `pinyin` ( `PY` varchar(1), `HZ1` varchar(1), `HZ2` varchar(1) ) ; INSERT   INTO   `pinyin` 

sql中根据汉字的拼音首字母查询的函数

/****** Object:  UserDefinedFunction [dbo].[f_GetPy]    Script Date: 06/09/2010 10:31:33 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOcreate function   [dbo].[f_GetPy](@str   nvarchar(4000)) returns   nvarchar(4000) as begin declare   @strlen 

关联数组中根据某个某个字段的值排序

$tempArr = array(); foreach($arr as $key=>$v){ $tempArr[$key]['clue'] = $v['clue'];//所要排序的字段 } //根据字段的值从大到小排序 array_multisort($tempArr,SORT_DESC,$arr); 原文地址:https://www.cnblogs.com/jackzhuo/p/11797773.html

剑指offer 面试题38—数字在排序数组中出现的次数

题目: 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 解法一:O(n) 顺序遍历 解法二:O(logn) 用二分查找,分别找出第一个3,和最后一个3的位置,然后计算个数. #include <stdio.h> int GetFirstK(int* data,int length,int k,int start,int end) { if(start > end) return -1; int m