js 中文数组或中文对象数组排序实现的几种方式

js中的sort默认是针对英文排序的,那么对于中文怎么进行排序呢
1、使用localeCompare
var arr = ['南京', '北京', '上海', '杭州', '深圳'];
function sortChinese (arr) { // 参数: 排序的数组
arr.sort(function (item1, item2) {
return item1.localeCompare(item2, 'zh-CN');
})
}
sortChinese(arr)
console.log(arr); // ["北京", "杭州", "南京", "上海", "深圳"]
2、使用Intl.Collator
var arr = ['南京', '北京', '上海', '杭州', '深圳'];
function sortChinese (arr) {
// 参数: 排序的数组
return arr.sort(Intl.Collator().compare);
}
sortChinese(arr)
console.log(arr);
那么数组中如果还有object对象,对象的属性包含中文,然后根据这个对象属性进行排序呢
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: '上海'}}]*/
对国内的所有省份进行排序,并且首字母相同的第一个添加首字母 var provinceList = [
{"code": "82", "value": "澳门"},
{"code": "34", "value": "安徽"},
{"code": "11", "value": "北京"},
{"code": "50", "v...点击查看剩余70%
网友评论0