运用api介绍
sort(compareFn)
如果 compareFn(a, b) 大于 0,b 会被排列到 a 之前。
如果 compareFn(a, b) 小于 0,那么 a 会被排列到 b 之前;
如果 compareFn(a, b) 等于 0,a 和 b 的相对位置不变。
referenceStr : 引用字符串
compareString : 比较字符串
locales 可选
表示缩写语言代码(BCP 47 language tag)的字符串,或由此类字符串组成的数组。
对应于 Intl.Collator() 构造函数的 locales 参数。
"zh": 中文
"zh-cmn": 中文普通话
"zh-cmn-Hans": 中文普通话简体
options 可选
一个调整输出格式的对象。对应于 Intl.Collator() 构造函数的 options 参数。
在不支持 Intl.Collator 的实现中,该参数会被忽略。
referenceStr.localeCompare(compareString, locales, options)
返回值
如果引用字符串(referenceStr)存在于比较字符串(compareString)之前则为负数;
如果引用字符串存在于比较字符串之后则为正数;
相等的时候返回 0。
代码实现
let arr = [
{ "areaName": "南京市" }, { "areaName": "大连市" },
{ "areaName": "海口市" }, { "areaName": "长沙市" },
{ "areaName": "无锡市" }, { "areaName": "常州市" },
{ "areaName": "郑州市" }, { "areaName": "天津市" },
{ "areaName": "北京市" }, { "areaName": "广州市" },
{ "areaName": "深圳市" }, { "areaName": "成都市" },
{ "areaName": "西安市" }, { "areaName": "盐城市" },
{ "areaName": "上海市" }, { "areaName": "苏州市" },
{ "areaName": "杭州市" }, { "areaName": "佛山市" },
{ "areaName": "宁波市" }, { "areaName": "武汉市" },
{ "areaName": "重庆市" }, { "areaName": "厦门市" },
{ "areaName": "沈阳市" }, { "areaName": "青岛市" },
{ "areaName": "济南市" }, { "areaName": "福州市" },
{ "areaName": "南昌市" }, { "areaName": "太原市" }
]
//设置中文排序方法
const setChineseSort=(arr,codeName) => {
// 设置一个存储中文名称的数组
let newNameArr = arr.map(v=> v[codeName]) || []
// 获取一个经过首字母排序的数组
let sortArray = newNameArr.sort((str1, str2) => str1.localeCompare(str2, 'zh'))
console.log('[index.js/74]', sortArray)
// 对原数组中的数据添加编号
arr.forEach(el => {
sortArray.forEach((item, index) => {
if (el[codeName] == item) {
el["code"] = index
}
})
})
// 对数组中编入的序号重新排序
const sortArr = (code) => {
return function (a, b) {
return a[code] - b[code]
}
}
console.log(JSON.stringify(arr));
// 获取结果
return arr.sort(sortArr('code'))
}
setChineseSort(arr,'areaName')
Comments | NOTHING