js实现汉字中文排序的方法 例如:省市列表的排序
localeCompare()
1.数组内的元素是中文字符串的简单排序
var arr = ['南京', '北京', '上海', '杭州', '深圳'];
function sortChinese (arr) { // 参数: 排序的数组
arr.sort(function (item1, item2) {
return item1.localeCompare(item2, 'zh-CN');
})
}
sortChinese(arr)
console.log(arr); // ["北京", "杭州", "南京", "上海", "深圳"]
2.数组内的元素是对象,以对象某一个属性进行排序
var arr = [
{name: '南京', code: '09', info: {province: '江苏'}},
{name: '北京', code: '01', info: {province: '北京'}},
{name: '上海', code: '02', info: {province: '上海'}},
{name: '深圳', code: '05', info: {province: '广东'}}
];
function sortChinese (arr, dataLeven) { // 参数:arr 排序的数组; dataLeven 数组内的需要比较的元素属性
/* 获取数组元素内需要比较的值 */
function getValue (option) { // 参数: option 数组元素
if (!dataLeven) return option
var data = option
dataLeven.split('.').filter(function (item) {
data = data[item]
})
return data + ''
}
arr.sort(function (item1, item2) {
return getValue(item1).localeCompare(getValue(item2), 'zh-CN');
})
}
sortChinese(arr, 'name') // 例如:比较的是name,传入的就是 'name'
console.log(arr);
/*[{name: '北京', code: '01', info: {province: '北京'}},
{name: '南京', code: '09', info: {province: '江苏'}},
{name: '上海', code: '02', info: {province: '上海'}},
{name: '深圳', code: '05', info: {province: '广东'}}]*/
sortChinese(arr, 'info.province') // 例如:比较的是数组元素属性info内的province属性,传入的就是 'info.province'
console.log(arr);
/* [{name: '北京', code: '01', info: {province: '北京'}},
{name: '深圳', code: '05', info: {province: '广东'}},
{name: '南京', code: '09', info: {province: '江苏'}},
{name: '上海', code: '02', info: {province: '上海'}}]*/
3.对国内的所有省份进行排序,并且首字母相同的第一个添加首字母
var provinceList = [
{"code": "82", "value": "澳门"},
{"code": "34", "value": "安徽"},
{"code": "11", "value": "北京"},
{"code": "50", "value": "重庆"},
{"code": "35", "value": "福建"},
{"code": "62", "value": "甘肃"},
{"code": "44", "value": "广东"},
{"code": "45", "value": "广西"},
{"code": "52", "value": "贵州"},
{"code": "46", "value": "海南"},
{"code": "13", "value": "河北"},
{"code": "41", "value": "河南"},
{"code": "23", "value": "黑龙江"},
{"code": "42", "value": "湖北"},
{"code": "43", "value": "湖南"},
{"code": "22", "value": "吉林"},
{"code": "32", "value": "江苏"},
{"code": "36", "value": "江西"},
{"code": "21", "value": "辽宁"},
{"code": "15", "value": "内蒙古"},
{"code": "64", "value": "宁夏"},
{"code": "63", "value": "青海"},
{"code": "37", "value": "山东"},
{"code": "14", "value": "山西"},
{"code": "61", "value": "陕西"},
{"code": "31", "value": "上海"},
{"code": "51", "value": "四川"},
{"code": "71", "value": "台湾"},
{"code": "12", "value": "天津"},
{"code": "54", "value": "西藏"},
{"code": "81", "value": "香港"},
{"code": "65", "value": "新疆"},
{"code": "53", "value": "云南"},
{"code": "33", "value": "浙江"}
]
function chineseLetter (arr, dataLeven) {
var letter = 'abcdefghjklmnopqrstwxyz'.split('')
var zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split('')
/* 获取数组元素比较的值 */
function getValue (option) {
if (!dataLeven) return option
var data = option
dataLeven.split('.').filter(function (item) {
data = data[item]
})
return data + ''
}
/* 进行排序 */
arr.sort(function (item1, item2) {
return getValue(item1).localeCompare(getValue(item2), 'zh-Hans-CN')
})
/* 判断需要排序的字符串是否含有中文字符 */
if (/[\u4e00-\u9fff]/.test(getValue(arr[0])) && typeof arr[0] === 'object') pySegSort(0, 0)
/* 给省列表中添加首字符 */
function pySegSort (letterIndex, zhIndex) {
var first = true // 首次是否加 字母标识
for (var i = zhIndex; i < arr.length; i++) {
var item = arr[i]
// 是否有值 && 当前值大于等于本次字母的最小值 && (最后一位 || 当前值小于下次字母的最小值)
var state = zh[letterIndex] && getValue(item).localeCompare(zh[letterIndex], 'zh') >= 0 && (letterIndex === letter.length - 1 || getValue(item).localeCompare(zh[letterIndex+1], 'zh') < 0)
if (state) { // 满足条件,同一个首字母下的:例如 A 下的所有省份
if (first) { //是否是第一次出现
item.letter = letter[letterIndex].toUpperCase()
first = false
} else {
item.letter = ''
}
} else { // 递归调用 函数,进行下次字母下的排列
letterIndex++
if (letterIndex < letter.length) {
pySegSort(letterIndex, i)
break
}
}
}
}
}
chineseLetter(provinceList, 'value')
console.log(provinceList)
// 结果如下:
[
{code: "34", value: "安徽", letter: "A"}
{code: "82", value: "澳门", letter: ""}
{code: "11", value: "北京", letter: "B"}
{code: "50", value: "重庆", letter: "C"}
{code: "35", value: "福建", letter: "F"}
{code: "62", value: "甘肃", letter: "G"}
{code: "44", value: "广东", letter: ""}
{code: "45", value: "广西", letter: ""}
{code: "52", value: "贵州", letter: ""}
{code: "46", value: "海南", letter: "H"}
{code: "13", value: "河北", letter: ""}
{code: "41", value: "河南", letter: ""}
{code: "23", value: "黑龙江", letter: ""}
{code: "42", value: "湖北", letter: ""}
{code: "43", value: "湖南", letter: ""}
{code: "22", value: "吉林", letter: "J"}
{code: "32", value: "江苏", letter: ""}
{code: "36", value: "江西", letter: ""}
{code: "21", value: "辽宁", letter: "L"}
{code: "15", value: "内蒙古", letter: "N"}
{code: "64", value: "宁夏", letter: ""}
{code: "63", value: "青海", letter: "Q"}
{code: "37", value: "山东", letter: "S"}
{code: "14", value: "山西", letter: ""}
{code: "61", value: "陕西", letter: ""}
{code: "31", value: "上海", letter: ""}
{code: "51", value: "四川", letter: ""}
{code: "71", value: "台湾", letter: "T"}
{code: "12", value: "天津", letter: ""}
{code: "54", value: "西藏", letter: "X"}
{code: "81", value: "香港", letter: ""}
{code: "65", value: "新疆", letter: ""}
{code: "53", value: "云南", letter: "Y"}
{code: "33", value: "浙江", letter: "Z"}
]
js实现汉字中文排序的方法 例如:省市列表的排序的更多相关文章
- jquery------显示加载的js时出现中文乱码解决方法
方法: 把my.js文件复制出来,用记事本打开,再另存为的时候设置编码格式为utf-8即可
- python内置数据类型-字典和列表的排序 python BIT sort——dict and list
python中字典按键或键值排序(我转!) 一.字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序. Py ...
- 2019年6月12日——开始记录并分享学习心得——Python3.7中对列表进行排序
Python中对列表的排序按照是排序是否可以恢复分为:永久性排序和临时排序. Python中对列表的排序可以按照使用函数的不同可以分为:sort( ), sorted( ), reverse( ). ...
- JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序
定义:用本地特定的顺序来比较两个字符串. 语法:stringObject.localeCompare(target) 参数:target——要以本地特定的顺序与 stringObject 进行比较的字 ...
- js中实现中文按字母拼音排序
js中实现中文按字母拼音排序 var Pinyin = (function (){ var Pinyin = function (ops){ this.initialize(ops); }, opti ...
- PHP汉字转拼音的两种方法+PHP提取汉字(中文)方法
方法一:依据ASCII码转换,GB2312库对多音字也无能为力. GB2312标准共收录6763个汉字,不在范围内的汉字是无法转换.如:中国前总理朱镕基的"镕"字. GB2312中 ...
- Oracle中中文、数字,英文混杂形式的字段进行排序的方法
http://blog.csdn.net/p451933505/article/details/9272257 对Oracle中中文.数字.英文混杂形式的字段进行排序的方法: 例如: order by ...
- js 排序:sort()方法、冒泡排序、二分法排序。
js中的排序,这里介绍三种,sort()方法.冒泡排序.二分法排序. 1.sort方法 写法: 数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的 ...
- js按照特定的中文字进行排序的方法
之前遇到过按照中文字符排序的需求很顺利的解决了,这次是按照特定的中文字进行排序,比如按照保守型,稳健型,平衡型,成长型,进取型进行排序. 可以使用localeCompare() 方法来实现中文按照拼音 ...
随机推荐
- linux内核对块设备的使用
1 partition table 这里的分析以经典的MBR为例. 在MBR里面有partition table,每一项对应一个逻辑的块设备,partion table中的每一项是16个字节. 第一个 ...
- CF 1036 B Diagonal Walking v.2 —— 思路
题目:http://codeforces.com/contest/1036/problem/B 题意:从 (0,0) 走到 (n,m),每一步可以向八个方向走一格,问恰好走 k 步能否到达,能到达则输 ...
- bzoj3612 [Heoi2014]平衡——整数划分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3612 看了好久才弄清楚题意... 原来整数划分就是这样的啊:https://blog.csd ...
- 【158】◀▶ Linux-Bash学习
鸟哥的 Linux 私房菜 Linux 的 26 个命令 Shell 脚本教程 Linux 命令大全 目录——按文件顺序: echo:显示变量内容 printf:格式化输 ...
- mysql通用分页存储过程遇到的问题(转载)
mysql通用分页存储过程遇到的问题(转载) http://www.cnblogs.com/daoxuebao/archive/2015/02/09/4281980.html
- Java DAO模式
DAO模式: DAO(DateAccessObject,数据存取对象) 位于业务逻辑和持久化数据之间,实现对持久化数据的访问. DAO组成: DAO接口: 数据库的所有操作定义成抽象方法,可以提供多种 ...
- noip2002矩阵覆盖(搜索)
矩阵覆盖 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见 ...
- 使用 script 的 module 属性实现 es6 以上的兼容
几个月前看到了这篇文章 https://philipwalton.com/articles/deploying-es2015-code-in-production-today/,给了我很大的启发,本来 ...
- React实战之60s倒计时按钮(发送短信验证按钮)
React实战之60s倒计时按钮——短信验证按钮 导入:(antd组件——Form表单) import { Button, Form, Input } from 'antd'; const FormI ...
- 我的周记2——“天道酬勤"
Get 什么是JAVA https://zhuanlan.zhihu.com/p/62717204 了解下HTTP 缓存机制 https://juejin.im/post/5a1d4e546fb9a ...