js 中文汉字按拼音排序,浏览器英文环境也可正确运行
之前在其他地方看的zh字母分类列表不对,导致部分排序错误,特此记录
最重要的首拼汉字列表: 阿八嚓耷妸发旮哈丌咔垃妈嗯喔妑七呥仨他穵夕丫帀
// sourceData: [{ id: restaurant.id, name: restaurant.name, available: true }, ...]
function formatCommonData(sourceData) {let childrens = {};if (sourceData.length > 0) {const result = [];const defaultIndexes = [{ i: 9, data: ['i'] }, { i: 21, data: ['v', 'u'] }];const letters = '*abcdefghjklmnopqrstwxyz'.split('');const zh = '阿八嚓耷妸发旮哈丌咔垃妈嗯喔妑七呥仨他穵夕丫帀'.split('');const english = new RegExp('[A-Za-z]+');letters.forEach((letter, index) => {const current = { index: letter.toUpperCase(), childrens: [] };sourceData.forEach((item) => {let matched = false;if (english.test(item.name.substr(0, 1))) {matched = item.name.length > 0 && item.name.charAt(0).toUpperCase() === letter.toUpperCase();} else {// localeCompare需要加参数 'zh', 不然在英文环境下,无法正常工作matched = (!zh[index - 1] || zh[index - 1].localeCompare(item.name, 'zh') <= 0) && item.name.localeCompare(zh[index], 'zh') === -1;}if (matched) {current.childrens.push({ id: item.id, name: item.name, available: true });}});result.push(JSON.parse(JSON.stringify(current)));});defaultIndexes.forEach((index) => {index.data.forEach((x) => {const list = sourceData.filter((item) => item.name.length > 0 && item.name.charAt(0).toUpperCase() === x.toUpperCase());const temp = [];list.forEach((item) => {temp.push({ id: item.id, name: item.name, available: true });});result.splice(index.i, 0, { index: x.toUpperCase(), childrens: temp });});});const last = result.filter((item) => item.childrens.length > 0);last.forEach((item) => {item.childrens.sort((a, b) => a.name.localeCompare(b.name, 'zh'));});childrens = { indexes: last.map((x) => x.index), data: last };}return childrens;
}
以上代码可以将 list 转为以下格式
{indexes: ['B', 'H', 'L', 'S'],data: [{index: 'B',childrens: [{ id: 1, name: '北京安立路', availabel: true },{ id: 2, name: '北京百子湾', availabel: true }]},{index: 'H',childrens: [{ id: 3, name: '河北', availabel: true },{ id: 4, name: '河南', availabel: true }]},......]
}
js 中文汉字按拼音排序,浏览器英文环境也可正确运行相关推荐
- js中文汉字按拼音排序
1,datatable拓展 按中文排序 jQuery.extend( jQuery.fn.dataTableExt.oSort, {"chinese-string-asc" : f ...
- js中文汉字转拼音详细教程
一.效果 主要实现了中文汉字转成拼音,非中文汉字部分则保留原格式,兼容了各类情况,下图中都有示例 文章最后有项目地址 二.思路 实际就是匹配字符编码转成相应的拼音,那么当然我们就需要对应的字符编码(C ...
- 中文汉字按拼音排序并按字母分类(uniapp indexedList索引列表格式匹配)
最近做uni-app项目,遇到中文排序,使用indexedList组件布局渲染.自己也是查询了很多资料,https://www.cnblogs.com/wteng/p/5658972.html展现了一 ...
- Java字母笔顺_Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序
一.需求描述 最近要做一个类似微信的,在登录界面选择国家地区的功能,微信有中文汉字笔画排序以及中文拼音排序等几种方式,如下所示: 微信:简体中文.拼音排序 微信:繁体中文.笔画排序 微信 英文 字母排 ...
- Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序
发布时间:2018-11-16 技术:Android 概述 最近要做一个类似微信的,在登录界面选择国家地区的功能,微信有中文汉字笔画排序以及中文拼音排序等几种方式,如下所示: 简体中文 拼音排序;繁体 ...
- js 根据汉字首字母排序(省份排序) 或 根据英文首字母排序——za排序 az排序
js 根据汉字首字母排序(省份排序) 或 根据英文首字母排序--z~a排序 & a~z排序 示例1 let arr = ["贵州省", "江苏省", & ...
- 表格排序 支持汉字按拼音排序,面向对象的使用方法
周末无聊利用swapNode方法写了个排序算法,性能比较一般,超简单的冒泡排序,但是由于使用了swapNode,所以TR以及TD对象后绑定的属性不会丢失,同时解决了checkbox在swapNode后 ...
- mysql中的汉字怎么转换_Mysql中文汉字转拼音的实现(每个汉字转换全拼)
一.创建拼音对照表 代码如下: -- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yin_` varchar(255) ...
- JS版汉字与拼音互转终极方案,附简单的JS拼音输入法
原文:http://www.cnblogs.com/liuxianan/p/pinyinjs.html 前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的不支持多 ...
最新文章
- 计算机组成原理读写周期波形图,第3章存储器层次结构-1讲述.ppt
- JAVA sql2000 连接细节
- WebView 加载javaScript
- IDEA 2020.2 稳定版发布,带来了不少新功能...
- 用户注册功能交互流程
- “薅羊毛”漏洞分析 | 我是如何到处“混吃混喝”的
- 匹配嵌套的构造(较复杂)
- ubuntu16.04没有办法使用CRT,或者SSH工具的解决办法
- 英特尔一口气发布了三款处理器、两款存储、一款以太网适配器
- Random在java中怎么用_java中random()函数用法介绍
- 行为模型、价值模型、市场模型
- golang 微信小程序登录
- vs运行localhos转换为本地ip地址访问
- 三级分销系统哪家好?360shop
- oracle ola_访谈和书摘:Ola Bini,“实用的JRuby on Rails Web 2.0项目”
- Module use of python36.dll conflicts with this version of Python
- ppt模板文字拆分怎么制作?
- matlab光谱实验,实验四Matlab神经网络及应用于近红外光谱的汽油辛烷值预测
- office的一些软件
- 摄像头小巧待机时间长,不插电免安装手机远程监控,这是如何实现