如何在JS中进行中文、字母、数字的排序

3,686 阅读2分钟

在JS中进行中文、字母、数字的排序

sortResult(data, type) {
	let result = []
	switch (type) {
		// 当比较的item为对象的某个属性时,value = item [key]

		// 1.中文(按第一个文字)
		case 'chinese':
			result = data.sort((item1, item2) => {
				const value1 = item1.charAt(0);
				const value2 = item2.charAt(0);
                // 这里localeCompare应该是不支持第二个参数的 但是并没有报错,请直接使用value1.localeCompare(value2)
				return value1.localeCompare(value2, 'zh-CN');
			})
			break;
		// 2.字母(按第一个字母且不区分大小写,请自行修改)
		case 'letter':
			result = data.sort((item1, item2) => {
            
            	//2.1不区分大小写
				const value1 = item1.charAt(0).toLowerCase();
				const value2 = item2.charAt(0).toLowerCase();
				return value1.localeCompare(value2);
                
                //2.2区分大小写
                const value1 = item1.charAt(0);
				const value2 = item2.charAt(0);
                
                //测试2.2
                const arr = ['A','a','b','B']
                arr.sort(function (item1, item2) {
                    return item1.localeCompare(item2);
                })
                //输出["a", "A", "b", "B"]
			})
			break;
		//3.数字
		case 'number':
			result = data.sort((item1, item2) => {
				const value1 = item1;
				const value2 = item2;
				return value1 - value2;
			})
			break;

		default:
			result = data;
			break;
	}
	return result;
}

localeCompare介绍

定义和用法

用本地特定的顺序来比较两个字符串。

语法

stringObject.localeCompare(target)

参数 描述

target 要以本地特定的顺序与 stringObject 进行比较的字符串。

返回值

说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。

说明

把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。

localeCompare() 方法提供的比较字符串的方法,考虑了*****规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。