您的位置:

JS中文排序详解

一、JS中文排序原理

JS中文排序是通过比较中文字符的Unicode编码实现的,每个中文字符在Unicode编码中都有对应的整数码位。当比较两个中文字符时,JS会将其码位转换成16进制数,并将其进行比较,码位小的字符排在前面。

代码示例:

function compare(a, b){
    return a.localeCompare(b);
}
const arr = ["张三", "李四", "王五"];
arr.sort(compare); // ["李四", "王五", "张三"]

二、JS中文首字母排序

在实际开发中,经常需要将中文按照首字母排序,可以通过将中文字符串转换成拼音,并对拼音进行排序来实现。

代码示例:

import pinyin from 'pinyin';
function compare(a, b){
    return pinyin(a)[0][0].localeCompare(pinyin(b)[0][0]);
}
const arr = ["李四", "张三", "王五"];
arr.sort(compare); // ["李四", "王五", "张三"]

三、JS中文排序根据码值

除了比较中文字符的Unicode编码外,也可以直接比较中文字符的码值。中文字符的码值都大于127,因此我们可以将中文字符转换成对应的码值来实现排序。

代码示例:

function compare(a, b) {
    let tempa = '';
    let tempb = '';
    for (let i = 0; i < a.length; i++) {
        tempa += a.charCodeAt(i);
    }
    for (let i = 0; i < b.length; i++) {
        tempb += b.charCodeAt(i);
    }
    return tempa - tempb;
}
const arr = ["张三", "李四", "王五"];
arr.sort(compare); // ["李四", "张三", "王五"]

四、JS map排序

除了使用sort排序外,还可以使用map来实现中文排序。map是JavaScript中的一种数据结构,可以在插入和删除数据时保持数据的有序性。

代码示例:

const map = new Map([
  ["张三", 1],
  ["李四", 2],
  ["王五", 3]
]);
const sortedMap = new Map([...map.entries()].sort());
console.log(sortedMap); // Map(3) {"李四" => 2, "王五" => 3, "张三" => 1}

五、JS的sort排序方法

JS中的sort方法可以对数组中的元素进行排序,如果不传入比较函数,sort会默认将元素转换成字符串并按照Unicode编码值进行排序。

代码示例:

const arr = ["c", "b", "a", "张三", "李四", "王五"];
arr.sort(); // ["a", "b", "c", "李四", "王五", "张三"]

六、原声JS按照a到z中文排序

可以使用Intl.Collator构造函数进行排序,可以指定sort选项为"zh",表示按照中文进行排序,也可以选项为"en",表示按照英文进行排序。

代码示例:

const arr = ["c", "b", "a", "张三", "李四", "王五"];
const collator = new Intl.Collator('zh');
arr.sort(collator.compare); // ["a", "b", "c", "李四", "王五", "张三"]

七、JS选择排序

选择排序是一种简单的排序算法,每次选择最小的元素放在最前面,然后再从剩余的元素中选择最小的元素放在已排序的元素后面,重复这个过程,直到全部元素都排好序。

代码示例:

function selectionSort(arr) {
    let n = arr.length;
    for (let i = 0; i < n - 1; i++) {
        let minIndex = i;
        for (let j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        let temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
}
const arr = ["c", "b", "a", "张三", "李四", "王五"];
selectionSort(arr); // ["a", "b", "c", "李四", "王五", "张三"]

八、JS归并排序

归并排序是一种分治的排序算法,将一个大问题分解为若干个小问题,分别求解,然后将它们的解组合起来,得到大问题的解。归并排序的核心是将两个有序的数组合并成一个有序的数组。

代码示例:

function mergeSort(arr) {
    // 将数组拆分成两个子数组
    function merge(arr, left, right) {
        let result = [],
            il = 0,
            ir = 0;
        while (il < left.length && ir < right.length) {
            if (left[il] < right[ir]) {
                result.push(left[il++]);
            } else {
                result.push(right[ir++]);
            }
        }
        return result.concat(left.slice(il)).concat(right.slice(ir));
    }

    function mergeSort1(items) {
        if (items.length < 2) {
            return items;
        }
        let middle = Math.floor(items.length / 2),
            left = items.slice(0, middle),
            right = items.slice(middle);

        return merge(mergeSort1(left), mergeSort1(right));
    }

    return mergeSort1(arr);
}
const arr = ["c", "b", "a", "张三", "李四", "王五"];
mergeSort(arr); // ["a", "b", "c", "李四", "王五", "张三"]
js高级程序设计笔记14(js高级程序设计笔记14页)

本文目录一览: 1、JavaScript高级程序设计 该怎么看 2、JavaScript学习笔记之数组基本操作示例 3、JS中有关sort以及return的问题 JavaScript高级程序设计 该怎

2023-12-08
javascript简要笔记,JavaScript读书笔记

2022-11-17
印象笔记记录java学习(Java成长笔记)

2022-11-12
python基础学习整理笔记,Python课堂笔记

2022-11-21
java方法整理笔记(java总结)

2022-11-08
重学java笔记,java笔记总结

2022-11-23
java学习笔记(java初学笔记)

2022-11-14
htmljs编程笔记(html代码笔记)

本文目录一览: 1、html代码和JS代码有什么区别 2、如何在html中调用js函数 3、JavaScript学习笔记之数组基本操作示例 4、HTML5初学者笔记 5、《web前端笔记7》js字符—

2023-12-08
JS中文排序详解

2023-05-20
java客户端学习笔记(java开发笔记)

2022-11-14
python学习之笔记(python的笔记)

2022-11-10
java基础知识学习笔记一,Java基础笔记

2022-11-21
发篇java复习笔记(java课程笔记)

2022-11-09
jsp程序开发学习笔记2,jsp程序设计题库

本文目录一览: 1、《JSP&Servlet学习笔记》pdf下载在线阅读,求百度网盘云资源 2、林信良编著jsp&servlet学习笔记第2版课后答案吗 3、jsp有没有快速掌握的办法呀? 4、要学J

2023-12-08
javascript一句话笔记,javascript基本语句

2022-11-16
java包笔记,Java语言包

2022-11-18
js待办事项列表添加删除代码的简单介绍

本文目录一览: 1、“点击此处可添加笔记”的代码怎么写 2、js动态添加、删除html代码 3、vivo手机便签怎么一起删 “点击此处可添加笔记”的代码怎么写 输入符号就可以了第一步打开手机,点击备忘

2023-12-08
java笔记,大学java笔记

2022-11-28
java笔记,尚硅谷java笔记

2022-12-01
python方法笔记,python基础教程笔记

2022-11-20