js实现中英文合并排序

Unity UGUI虚拟键盘开发:模块化设计与中英文输入实现 在Unity应用开发中,自定义输入系统是提升用户体验和界面一致性的关键技术。其核心原理在于通过事件驱动架构,将输入逻辑、UI呈现与数据管理分离,实现高效可控的交互处理。这种模块化设计的技术价值在于提供了高度的可定制性和跨平台适配能力,尤其适用于游戏内聊天、教育软件、信息终端等需要沉浸式或特定风格输入的场景。本文聚焦于UGUI虚拟键盘的实现,深入探讨了状态机管理、拼音输入集成等热词技术,并提供了从基础布局到性能优化的完整工程实践方案。 阅读详情

1 简单说明

本文使用localeCompare方法实现了对中英文混合排序方法,共实现了两种排序方法,排序结果如下

2 代码

2.1 将中英文归类按照字典的排序方法


/* 对名字进行排序,包括中文、英文和特殊字符 */

class NameSort{
    // a.localeCompare(b)的返回值
    // -1: a="a", b="b";
    // "中国"="zhongguo"; "郑州"="zhengzhou";
    // 0:  a="中国", b="中国";
    // 1:  a="中国", b="郑州"; "zhongguo"的第三个字母o > "zhengzhou"的第三个字母e
    // -1: a="郑州", b="中国";

    sort(nameArr) {
        if(nameArr.length == 0){
            return;
        }

        let enArr = "*ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
        let zhArr = [{zh:'*', prev:'*'},{zh:'阿', prev:'*'}, {zh:'八', prev:'阿'},{zh:'嚓', prev:'八'},{zh:'哒', prev:'嚓'},{zh:'妸', prev:'哒'},{zh:'发', prev:'妸'},{zh:'旮', prev:'发'},{zh:'哈', prev:'旮'},{zh:'I', prev:'哈'},{zh:'讥', prev:'哈'},{zh:'咔', prev:'讥'},{zh:'垃', prev:'咔'},{zh:'痳', prev:'垃'},{zh:'拏', prev:'痳'},{zh:'噢', prev:'拏'},{zh:'妑', prev:'噢'},{zh:'七', prev:'妑'},{zh:'呥', prev:'七'},{zh:'扨', prev:'呥'},{zh:'它', prev:'扨'},{zh:'U', prev:'它'},{zh:'V', prev:'它'},    {zh:'穵', prev:'它'},{zh:'夕', prev:'穵'},{zh:'丫', prev:'夕'},{zh:'Z', prev:'丫'}];

        // 排序好的数据
        let newNameArr = [];

        // 中文正则
        let chineseRe = new RegExp("^[\u4E00-\u9FA5]+$");
        // 英文正则
        let englishRe = new RegExp("^[a-zA-Z]+$");

        enArr.forEach((enItem, enIndex) => {
            let curr = {
                en: '', //字母
                data: []  //数据
            };

            nameArr.forEach((nameItem)=>{
                let firstChar = nameItem.name[0];

                // 首先过滤特殊字符
                if(enIndex == 0){
                    // 特殊符号
                    if(!(chineseRe.test(firstChar) || englishRe.test(firstChar))){
                        curr.data.push(nameItem);
                    }
                }else{
                    if(englishRe.test(firstChar)){
                        // 英文
                        if (firstChar.toUpperCase() == enItem) {
                            curr.data.push(nameItem);
                        }
                    }else if(chineseRe.test(firstChar)){
                        // 中文,注意中文中没有I、U、V拼音开头的汉字
                        if(enItem != "I" && enItem != "U" && enItem != "V"){
                            if ((zhArr[enIndex].prev).localeCompare(nameItem.name) <= 0 && (zhArr[enIndex].zh).localeCompare(nameItem.name) > 0) {
                                curr.data.push(nameItem);
                            }
                        }
                    }else if(enIndex == 0){
                        curr.data.push(nameItem);
                    }
                }
            });

            if (curr.data.length>0) {
                curr.en = enArr[enIndex];
                curr.data.sort((a, b) => {
                    return a.name.localeCompare(b.name);
                });
                newNameArr.push(curr);
            }
        });

        // 返回带有字母的列表
        return newNameArr;

        // return this.transfromArr(newNameArr);
    }

    // 删除字母,仅仅保留汉字
    transfromArr(data){
        if(data.length == 0){
            return new Array();
        }

        let newData = new Array();
        let startIndex = 0;

        if(data[0].en == "*"){
            startIndex = 1;
        }

        for (let i = startIndex; i < data.length; i++) {
            let dataItem = data[i];
            dataItem.data.forEach((dataItem)=>{
                newData.push(dataItem);
            });
        }

        // 特殊字符
        if(startIndex == 1){
            data[0].data.forEach((dataItem)=>{
                newData.push(dataItem);
            });
        }
        
        return newData;
    }
}

 

2.2 HTML代码

<!DOCTYPE html>
<html>
<head>
    <title>测试</title>
    <script type="text/javascript" src="./NameSort.js"></script>

    <script type="text/javascript">
        let arr = [{ name: "中a国" }, { name: "a国" }, { name: "Z策略" }, { name: "d策略" },    { name: "*策略" }, { name: "-策略" }, { name: "&" },    { name: "vue" }, { name: "uindex" }, { name: "郑州球" }];
        
        // 中英合并在一起排序
        let nameSort = new NameSort();
        console.log(nameSort.sort(arr));

        // 简单排序
        console.log(arr.sort((a, b)=>(a.name).localeCompare(b.name)));

    </script>
</head>
<body>

</body>
</html>

C++实现校园公告搜索引擎:从倒排索引到BM25排序的实战优化 搜索引擎作为信息检索的核心技术,其基本原理是通过倒排索引将文档内容映射为可快速查询的数据结构。在实现层面,倒排索引的高效组织和存储是关键,它决定了检索的响应速度与资源占用。对于中文搜索场景,中文分词的准确性与性能直接影响索引质量和查询效果。基于向量空间模型或BM25等经典算法进行相关性排序,能够有效提升搜索结果的质量,满足用户对精准信息的需求。这些技术广泛应用于各类垂直搜索、内容聚合平台和企业级文档检索系统中。本文以校园公告搜索为具体应用场景,详细探讨了如何利用C++从零构建一个高性能搜索引擎,并深入剖析了 阅读详情

相关推荐

Auto.js实战:从Excel题库到自动答题脚本的完整实现(兼容Pro版)

本文详细介绍了如何使用Auto.js Pro从Excel题库创建自动答题脚本的完整实现过程。涵盖环境配置、Excel解析、核心逻辑编写、调试技巧及多平台兼容方案,帮助用户高效完成自动化答题任务,特别适合需要处理重复答题场景的用户。

weixin_33483304的博客 200

js中 英文中文混合排序

js中 英文中文数字混合排序 问题简述: Array本身有sort方法,但是实现不了中英文混合排序。 一、Array默认的排序 Array的默认排序 sort() 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的 let chinese = ['应用','服务器','张三','蓝天','随便什么吧'] chines...

Brilliant Me 的博客 8136

js实现中英文混合排序

js实现中英文混合排序,支持所有浏览器,包括谷歌

数组、英文、中文、特殊字符混合排序JS

将中文字符转成拼音的方法。

weixin_48644617的博客 2123

基于JS实现数字+字母+中文的混合排序方法

主要介绍了基于JS实现数字+字母+中文的混合排序方法的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下

ubuntu17.04 UHD 驱动出错

ubuntu 17.04 源码安装UHD

xrh003的博客 1万+

JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序

  定义:用本地特定的顺序来比较两个字符串。   语法:stringObject.localeCompare(target)   参数:target——要以本地特定的顺序与 stringObject 进行比较的字符串。   返回值:说明比较结果的数字。   (1)如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。   (2)如果 stringObject 大于 target,则该方法返回大于 0 的数。   (3)如果两个字符串相等,或根

細水、長流√的专栏 3382

Visual Studio 6.0 镜像下载全指南:从企业版到中文版

本文提供Visual Studio 6.0企业版和中文版的镜像下载全指南,包括详细版本解析、已验证的下载链接及校验信息。针对现代系统的安装技巧和兼容性处理方案,帮助开发者高效获取并运行这一经典开发工具,特别适合维护遗留系统的专业人员。

weixin_33712987的博客 1034

从JavaScript二维数组排序说开去(2)

从上一篇文章里面我们已经知道了,需要通过sort函数,定义自己的排序比较函数。sort会回调这个函数,在排序时逐个比较元素。 那么问题来了,如果我想比较多个列,至少比较2列,使得其有效排序, 如果第2列是个字符串,这样写还行吗?不行。字符串相减,结果是NaN,not a number。那怎么办? 当然是写一个字符串排序函数了。先看以下第一版: function strcomp(a,b){ if( !(a instanceof Array) || !(b instanceof Array) ){ret

tjzzy的专栏 9424

基于ESP32-S3的电子吧唧DIY:蓝牙传图、触摸交互与动态显示全解析

本文详细解析了如何利用ESP32-S3芯片DIY一个功能丰富的电子吧唧(智能徽章)。项目核心实现了通过蓝牙低功耗(BLE)接收手机小程序发送的图片,并存储至文件系统,最终在带触摸功能的TFT屏幕上进行动态显示与交互。教程涵盖了从硬件选型、软件开发环境搭建,到蓝牙通信、图片处理与触摸功能实现的完整步骤,并分享了实用的调试技巧,适合创客和嵌入式爱好者动手实践。

weixin_42510243的博客 676

BAPI创建委外采购订单

使用BAPI BAPI_PO_CREATE1创建委外采购订单,组件为手工输入时,有几个点需要注意: 1、已通过CS01创建过BOM的物料,创建时会自动带出components。如果要修改当前组件清单,可以通过设置pocomponents-change_id = 'E’来实现 lv_sline = lv_sline + 1. ls_pocomponents-po_item = l_ebelp + 10. ls_pocomponents-ITEM_NO = l

Buffalo_soldier的博客 3262

Learn Algorithms With Javascript - 基于 Js 进行算法学习

基于 javascript 学习并实现常用的经典算法,欢迎对算法和数学感兴趣的 Js 开发者参与,一起学习共同进步。 算法实现 排序 插入排序 sort/lib/insertion-sort.js 希尔排序 sort/lib/shell-sort.js 选择排序 sort/lib/selection-sort.js 堆排序 sort/lib/heap-sort.js 冒泡排序 sort/lib...

weixin_30799995的博客 157

利用GPAC生成MP4文件

GPAC主要针对学生和内容创作者,代表了一个跨平台的多媒体框架,开发人员可以使用它在 LGPL 许可下制作开源媒体。GPAC多媒体框架兼容范围广泛的流行文件类型,从常见格式(如 AVI、MPEG 和 MOV)到复杂格式(如 MPEG-4 系统或 VRML/X3D)和 360 电影。

深之JohnChen的专栏 1771

json对象的值按照中文首字母排序

var finalArr=[], chars=[],list= []; for(var i=0;i<thatData.length;i++){//类别下拉框排序 if(/^[\u4e00-\u9fa5]*$/.test(thatData[i].categoryName.charAt(0))) { finalArr.push(thatData[i]); // 类别名称为中文的...

shang_GQ的博客 1703

零代码进行单细胞数据全流程分析教程

我开发的本地电脑无限使用无限分析作图的生信零代码一键分析电脑软件神器OmicsTools 软件在github上的zihaoxingstudy1/OmicsTools仓库 中,大家可以下载安装OmicsTools进行各种生信分析和可视化作图。

qq_40073899的博客 3625

【部署】Docker部署OpenClaw及常见问题解决(win11)

给AI单独开一个隔离的小容器,AI执行所有命令、下载文件都在这个小盒子里,就算AI被诱导执行危险命令,也不会影响你Win11本机的文件和系统,是必开的安全功能。Docker容器里的OAuth回调,会尝试在你Win11本机的1455端口捕获认证信息,但容器和Win11本机的网络隔离,导致浏览器访问不到这个回调地址。「挂载」就是把你Win11本机的文件夹,共享给容器里的「虚拟小电脑」,两边都能读写文件,比如你想让AI操作你D盘里的代码文件,就需要挂载。

海兰 4698

魔兽世界字体合并补全终极指南:5分钟彻底解决游戏乱码问题

还在为《魔兽世界》中出现的方块字和字符缺失而烦恼吗?Warcraft Font Merger(WFM)字体合并补全工具为您提供了一站式解决方案。这款免费、快速、简单的专业工具能够智能合并不同语言的字体文件,彻底解决游戏中的字体乱码问题,让您的游戏界面在任何语言环境下都能完美显示。 ## 🎯 为什么游戏需要字体合并补全? 在《魔兽世界》等大型多人在线游戏中,玩家来自世界各地,聊天界面经常需要显

gitblog_00061的博客 1159

PHP实现获取当地网络时间​(附完整源码)

PHP实现获取当地网络时间​(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 237

基于 SheetJS 的前端合并单元格复杂表头导入

顶部为基于 antdv 的 table 组件的复现效果。复现 Excel 表格中,合并完单元格后的效果。table 组件用到的 columns 配置,及 dataSource 数据,均由解析函数一并返回。无需要开发者二次开发及维护。底部为解析函数解析后返回的三个数据结果。分别为解析后的 antdv columns 表格列的配置项,直接传递给 table 组件的 columns 属性使用。

qq_43600513的博客 2691

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

前端学习常用的词汇中英文对照表

中文 英文 容器 container 分页 pager/pagenation 内容 content 主要的 main 左 left 右 right 上 top 下 bottom 父级 parent 兄弟姐妹 siblings 子级 children 删除 remove/delete 添加 append 选项卡 tab 日历 calendar...

Eternity_matt的博客 1013

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VUX 组件库贡献指南:metas.yml 变更记录与 next 版本号机制深度解析

本篇指南面向所有希望向 VUX(基于 Vue 与 WeUI 的移动端 UI 组件库)提交代码贡献的开发者,核心讲解「修改组件后如何同步维护组件元数据文档」这一关键协作规范。你将掌握 VUX 的 `changes` 变更记录书写规则、四种变更类型的适用场景,以及 `next` 占位版本号从提交到发布的全链路工作机制,并理解文档服务器如何在 PR 合并后 5 分钟内自动完成文档与 Demo 的构建更新

gitblog_00538的博客 832

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

猫抓 Cat-Catch 使用教程:网页视频 3 步下载,M3U8 分片怎么合并

通勤路上想保存一节网课视频,可页面只有播放器,没有下载按钮。猫抓 Cat-Catch 是一款浏览器资源嗅探扩展,会自动扫描当前页面,把里面的视频和音频资源列出来,你选中就能下载。M3U8 分片流它也能处理。 ## 猫抓怎么安装:三种方式任选其一 安装分三类人,各取所需: | 方式 | 适合谁 | 操作 | | --- | --- | --- | | 应用商店 | 大多数用户 | 在 Chro

gitblog_00970的博客 984

D2-Admin:优雅的企业级Vue.js后台管理系统介绍

D2-Admin:优雅的企业级Vue.js后台管理系统介绍 【免费下载链接】d2-admin An elegant dashboard 项目地址: https://gitcode.com/gh_mirrors/d2/d2-admi...

gitblog_07666的博客 584

现代 JavaScript 教程:如何贡献中文翻译?贡献流程与本地运行完整指南

《现代 JavaScript 教程》(The Modern JavaScript Tutorial)中文版是一个面向前端开发者的开源教程项目,内容覆盖从基础到高阶的 JavaScript 知识,基于最新的 ECMAScript 规范编写。如果你会中英文、熟悉 Markdown,就可以通过**贡献中文翻译**参与其中。本文完整讲解**中文翻译贡献流程**、翻译规范要点,以及如何**本地运行**教程并

gitblog_00092的博客 270

Ant Design Select 搜索模式结果排序实战:用 filterSort 控制过滤项的展示顺序

在 Ant Design Select 中开启搜索(`showSearch`)后,下拉面板默认按数据源顺序展示命中项,而业务中往往希望让过滤结果按固定规则排列(例如字母升序、数值大小或"命中优先级")。本篇基于仓库中 [search-sort 演示](https://link.gitcode.com/i/5cc8fe6c2a2b4fb1e54adc75be996388)及其[配套说明](https

gitblog_00797的博客 447

Operit 世界书分组能力合入稳定包:com.operit.worldbook 1.2.0 的合并实现与数据兼容指南

本文基于 Operit 仓库中的 TODO 文档 [worldbook_group_merge/index.md](https://link.gitcode.com/i/4e04c8335ec744b5a36247059cb2dfd8) 与 [1_MergePackageImplementation.md](https://link.gitcode.com/i/de7b3c09d6c699f697

gitblog_00807的博客 415
上一篇: java中日期与字符串相互转换
下一篇: ES中问题
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值