sheetJs / xlsx-js-style 纯前端实现导出 excel 表格及自定义单元格样式

文章目录

  • 一、安装
  • 二、创建基础工作表
  • 三、设置单元格宽度/高度/隐藏单元格
  • 四、分配数字格式
  • 五、超链接
  • 六、单元格注释
  • 七、公式
  • 八、合并单元格
  • 九、自定义单元格样式
  • 十、项目地址


一、安装

  • xlsx 地址:https://www.npmjs.com/package/xlsx
  • SheetJs 地址:https://docs.sheetjs.com/docs/
  • xlsx-js-style 地址:https://www.npmjs.com/package/xlsx-js-style
npm install xlsx-js-style

二、创建基础工作表

<script lang="ts" setup>
import { utils, writeFileXLSX } from 'xlsx'const list = [{ Name: 'Bill Clinton', Index: 42 },{ Name: 'GeorgeW Bush', Index: 43 },{ Name: 'Barack Obama', Index: 44 },{ Name: 'Donald Trump', Index: 45 },{ Name: 'Joseph Biden', Index: 46 },
]const exportFile = () => {// 创建一个工作簿 workbookconst workBook = utils.book_new()// 创建工作表 worksheet// json_to_sheet 	是将【由对象组成的数组】转化成sheet// aoa_to_sheet  	是将【一个二维数组】转化成 sheet// table_to_sheet  	是将【table的dom】直接转成sheet// 这里我们使用 json_to_sheetconst workSheet = utils.json_to_sheet(list)// 将工作表放入工作簿中// utils.book_append_sheet(workbook, worksheet, name, true);utils.book_append_sheet(workBook, workSheet, 'Data')// 生成数据保存writeFileXLSX(workBook, `SheetJSVueAoO.xlsx`, {bookType: 'xlsx',})
}
</script><template><div><button @click="exportFile">创建工作表</button></div>
</template>

sheetJs / xlsx-js-style 纯前端实现导出 excel 表格及自定义单元格样式

三、设置单元格宽度/高度/隐藏单元格

  • !cols 设置列宽
    cols 为一个对象数组,依次表示每一列的宽度
    wpx 字段表示以像素为单位,wch 字段表示以字符为单位
    hidden 如果为真,则隐藏该列

  • !rows 设置行高
    rows 为一个对象数组,依次表示每一行的高度

<script lang="ts" setup>
import { utils, writeFileXLSX } from 'xlsx-js-style'const list = [{Name: 'Bill Clinton',Date: '2023-01-01','Source category name': 'Excise Taxes','Source subcategory name': 'Corporation Income Taxes',},{Name: 'GeorgeW Bush',Date: '2023-01-01','Source category name': 'Excise Taxes','Source subcategory name': 'Corporation Income Taxes',},{Name: 'Barack Obama',Date: '2023-01-01','Source category name': 'Excise Taxes','Source subcategory name': 'Corporation Income Taxes',},{Name: 'Donald Trump',Date: '2023-01-01','Source category name': 'Excise Taxes','Source subcategory name': 'Corporation Income Taxes',},{Name: 'Joseph Biden',Date: '2023-01-01','Source category name': 'Excise Taxes','Source subcategory name': 'Corporation Income Taxes',},
]const exportFile = () => {// 创建一个工作簿 workbookconst workBook = utils.book_new()// 创建工作表 worksheetconst workSheet = utils.json_to_sheet(list)// 设置列宽// cols 为一个对象数组,依次表示每一列的宽度// wpx 字段表示以像素为单位,wch 字段表示以字符为单位// hidden 如果为真,则隐藏该列workSheet['!cols'] = [{ wpx: 100 },{ wch: 50 },{ width: 30 },{ hidden: true },]// 设置行高// rows 为一个对象数组,依次表示每一行的高度workSheet['!rows'] = [{ hpx: 30 }, { hpt: 50 }, { hidden: true }]// 将工作表放入工作簿中// utils.book_append_sheet(workbook, worksheet, name, true);utils.book_append_sheet(workBook, workSheet, 'Data')// 生成数据保存writeFileXLSX(workBook, `SheetJSVueAoO.xlsx`, {bookType: 'xlsx',})
}
</script><template><div><button @click="exportFile">设置单元格宽度/高度/隐藏</button></div>
</template>

sheetJs / xlsx-js-style 设置单元格宽度/高度/隐藏单元格

四、分配数字格式

<script lang="ts" setup>
import { utils, writeFileXLSX } from 'xlsx-js-style'const list = [{ Name: 'Barack Obama', Taxes: 726223 },{ Name: 'GeorgeW Bush', Taxes: 3.5 },{ Name: 'Bill Clinton', Taxes: 45571 },{ Name: 'Donald Trump', Taxes: 0.0219 },{ Name: 'Donald Trump', Taxes: new Date() },{ Name: 'Joseph Biden', Taxes: 666666 },
]const exportFile = () => {// 创建一个工作簿 workbookconst workBook = utils.book_new()// 创建工作表 worksheetconst workSheet = utils.json_to_sheet(list)// 分配数字格式workSheet['B3'].z = '"$"#,##0.00_);\\("$"#,##0.00\\)'workSheet['B4'].z = '#,##0'workSheet['B5'].z = '0.00%'workSheet['B6'].z = 'yyyy-mm-dd hh:mm:ss AM/PM'workSheet['B7'].z = '[Red](#,##0)'// 将工作表放入工作簿中// utils.book_append_sheet(workbook, worksheet, name, true);utils.book_append_sheet(workBook, workSheet, 'Data')// 生成数据保存writeFileXLSX(workBook, `SheetJSVueAoO.xlsx`, {bookType: 'xlsx',})
}
</script><template><div><button @click="exportFile">分配数字格式</button></div>
</template>

sheetJs / xlsx-js-style 单元格分配数字格式

五、超链接

<script lang="ts" setup>
import { utils, writeFileXLSX } from 'xlsx-js-style'const list = [{ Name: 'https://sheetjs.com' },{ Name: '电子邮箱' },{ Name: '访问 C 盘文件' },{ Name: '选中指定单元格' },{ Name: '跳转指定 Sheet' },{ Name: 'Joseph Biden' },
]const exportFile = () => {// 创建一个工作簿 workbookconst workBook = utils.book_new()// 创建工作表 worksheetconst workSheet = utils.json_to_sheet(list)// 链接 https://sheetjs.comworkSheet['A2'].l = {Target: 'https://sheetjs.com',Tooltip: 'https://sheetjs.com',}// 链接电子邮箱workSheet['A3'].l = { Target: 'mailto:ignored@dev.null' }// 访问本地 C 盘文件workSheet['A4'].l = { Target: 'file:///C:/Users/pc/Downloads/receipts.xls' }// 选中指定单元格 A1:C5workSheet['A5'].l = { Target: '#A1:C5', Tooltip: '选中 A1:C5 ' }// 跳转指定 SheetworkSheet['A6'].l = { Target: '#Data2!A1:C6', Tooltip: 'Data2' }workSheet['A7'].l = { Target: '#SheetJSDN', Tooltip: 'Defined Name' }// 将工作表放入工作簿中// utils.book_append_sheet(workbook, worksheet, name, true);utils.book_append_sheet(workBook, workSheet, 'Data')// 创建工作表2 worksheetvar worksheet2 = utils.aoa_to_sheet([['Same', 'Cross', 'Name']])utils.book_append_sheet(workBook, worksheet2, 'Data2')// 定义的名称, ref 选中的是当前超链接所在单元格位置workBook.Workbook = {Names: [{ Name: 'SheetJSDN', Ref: 'Data2!A1:A1' }],}// 生成数据保存writeFileXLSX(workBook, `SheetJSVueAoO.xlsx`, {bookType: 'xlsx',})
}
</script><template><div><button @click="exportFile">超链接</button></div>
</template>
  • 鼠标移上去看到小手标识及提示语,点击即可看到对应的超链接效果;
    sheetJs / xlsx-js-style 单元格添加超链接

六、单元格注释

<script lang="ts" setup>
import { utils, writeFileXLSX } from 'xlsx-js-style'const list = [{ Name: 'Vue' }, { Name: 'React' }, { Name: 'Angular' }]const exportFile = () => {// 创建一个工作簿 workbookconst workBook = utils.book_new()// 创建工作表 worksheetconst workSheet = utils.json_to_sheet(list)// 添加注释if (!workSheet.A2.c) workSheet.A2.c = []workSheet.A2.c.push({a: 'Vue',t: 'Vue 是一款用于构建用户界面的 JavaScript 框架',})if (!workSheet.A3.c) workSheet.A3.c = []// 如果设置为 true,则只有当用户将鼠标悬停在注释上时,注释才可见;workSheet.A3.c.hidden = trueworkSheet.A3.c.push({a: 'React',t: 'React 用于构建 Web 和原生交互界面的库',})if (!workSheet.A4.c) workSheet.A4.c = []// 如果设置为 true,则只有当用户将鼠标悬停在注释上时,注释才可见;workSheet.A4.c.hidden = trueworkSheet.A4.c.push({a: 'Angular',t: 'Angular 是一个应用设计框架与开发平台,旨在创建高效而精致的单页面应用',})// 将工作表放入工作簿中utils.book_append_sheet(workBook, workSheet, 'Data')// 生成数据保存writeFileXLSX(workBook, `SheetJSVueAoO.xlsx`, {bookType: 'xlsx',})
}
</script><template><div><button @click="exportFile">单元格注释</button></div>
</template>

sheetJs / xlsx-js-style 单元格注释

七、公式

<script lang="ts" setup>
import { utils, writeFileXLSX, writeFile } from 'xlsx-js-style'const list = [['姓名', '语文', '数学', '英语', '总数', '最大值', '姓名去重'],['张三', 80, 100, 100],['李四', 90, 100, 80],['李四', 85, 80, 100],['王五', 100, 85, 90],['张三', 90, 70, 90],['赵六', 95, 90, 80],['张三', 100, 80, 90],
]const exportSimpleFormula = () => {var ws = utils.aoa_to_sheet([[6], // A1[8], // A2[{ t: 'n', v: 3, f: 'SUM(A1,A2)' }], // SUM 函数[{ t: 'n', v: 3, f: 'CONCAT("concat:",A1,A2)' }], // CONCAT 函数])var wb = utils.book_new()utils.book_append_sheet(wb, ws, 'Sheet1')writeFile(wb, 'SheetJSFormula.xlsx')
}const exportFile = () => {// 创建一个工作簿 workbookconst workBook = utils.book_new()// 创建工作表 worksheetconst workSheet = utils.aoa_to_sheet(list)utils.sheet_set_array_formula(workSheet, 'E2:E8', 'B2:B8+C2:C8+D2:D8', true)list.forEach((e: (string | number)[], index: number) => {if (index > 0) {utils.sheet_set_array_formula(workSheet,`F${index + 1}`,`MAX(B${index + 1},C${index + 1},D${index + 1})`,true)}})utils.sheet_set_array_formula(workSheet,'G2:G8','_xlfn.UNIQUE(A2:A8)',true)// 将工作表放入工作簿中utils.book_append_sheet(workBook, workSheet, 'Data')// 生成数据保存writeFileXLSX(workBook, `SheetJSVueAoO.xlsx`, {bookType: 'xlsx',})
}
</script><template><div><button @click="exportSimpleFormula">简单公式</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<button @click="exportFile">数组公式</button></div>
</template>
  • 给单元格增加公式,比如下面:求指定单元格中的最大值(MAX函数);
  • 在 “结果” 双击即可看到对应的公式,按 " ESC" 即可退出;
    sheetJs / xlsx-js-style 单元格添加公式

八、合并单元格

  • !merges 设置单元格合并
  • merges 为一个对象数组,每个对象设定了单元格合并的规则
  • 方法一:通过 decode_range 设置范围合并单元格
  • 方法二:手动设置 A1-C1 的单元格合并(s:开始位置, e:结束位置, r:行, c:列)
<script lang="ts" setup>
import { utils, writeFile } from 'xlsx-js-style'const exportFile = () => {var ws = utils.aoa_to_sheet([// 特别注意合并的地方后面预留 2 个 null, 否则后面的内容(本例中是第四列其它信息)会被覆盖['主要信息', null, null, '其它信息'],['姓名', '性别', '年龄', '注册时间'],['张三', '男', 18, new Date()],['李四', '女', 22, new Date()],])if (!ws['!merges']) ws['!merges'] = []// 方法一:通过 decode_range 设置范围合并单元格ws['!merges'].push(utils.decode_range('A1:C1'))// 方法二:手动设置 A1-C1 的单元格合并// merges 为一个对象数组,每个对象设定了单元格合并的规则// s:开始位置, e:结束位置, r:行, c:列// ws['!merges'] = [//     { s: { r: 0, c: 0 }, e: { r: 0, c: 2 } },// ]var wb = utils.book_new()utils.book_append_sheet(wb, ws, 'Sheet1')writeFile(wb, 'SheetJSVueAoO.xlsx')
}
</script><template><div><button @click="exportFile">合并单元格</button></div>
</template>

sheetJs / xlsx-js-style 合并单元格

九、自定义单元格样式

<script lang="ts" setup>
import { utils, writeFile } from 'xlsx-js-style'const header = [[[]], // 占位[{}, // 占位{v: `工厂统计表 ${'\n'}`,t: 's',s: {font: {sz: 15, //设置标题的字号bold: true, //设置标题是否加粗name: '宋体',},//设置标题水平竖直方向居中,并自动换行展示alignment: {horizontal: 'center',vertical: 'center',wrapText: true,},fill: {fgColor: { rgb: '9FE3FF' },},},},],
]const info = [[null,{v: '                                                                                                                                                                                                                                                                                                                                                                                                    统计时间:2023/01/01 00:00',t: 's',s: {fill: {fgColor: { rgb: '9FE3FF' },},},},],[null,{v: '                                                                                                                                                                                                                                                                                                                                                                                                    统计维度:按月',t: 's',s: {fill: {fgColor: { rgb: '9FE3FF' },},},},],[null,{v: '                                                                                                                                                                                                                                                                                                                                                                                                    统计周期:2023/01/01 至 2023/01/01',t: 's',s: {alignment: {vertical: 'top',},fill: {fgColor: { rgb: '9FE3FF' },},},},],
]const risk = ['序号','险别','企财险','家财险','机动车','责任险','意外险','货运险','保证险','其他险',
]const data = risk.map((e) => {return {v: e,t: 's',s: {font: {bold: true, //设置标题是否加粗name: '宋体',},//设置标题水平竖直方向居中,并自动换行展示alignment: {horizontal: 'center',vertical: 'center',wrapText: true,},border: {top: { style: 'thin', color: { rgb: '000000' } },bottom: { style: 'thin', color: { rgb: '000000' } },left: { style: 'thin', color: { rgb: '000000' } },right: { style: 'thin', color: { rgb: '000000' } },},fill: {fgColor: { rgb: '9FE3FF' },},},}
})const random = (min: number, max: number): number => {return Math.floor(Math.random() * (max - min)) + min
}const dataArr = () => {const items: (Object | null)[][] = []Array.apply(null, { length: 18 } as any).map((e, index: number) => {const item: (Object | null)[] = [null]Array.apply(null, { length: 10 } as any).map((ele, idx: number) => {item.push({v: idx === 0 ? index + 1 : random(1, 100000),t: 's',s: {font: {name: '宋体',},alignment: {horizontal: 'center',vertical: 'center',},border: {top: { style: 'thin', color: { rgb: '000000' } },bottom: { style: 'thin', color: { rgb: '000000' } },left: { style: 'thin', color: { rgb: '000000' } },right: { style: 'thin', color: { rgb: '000000' } },},},})})items.push(item)})return items
}const exportFile = () => {var ws = utils.aoa_to_sheet([...header,...info,[null, ...data],...dataArr(),])// 合并单元格if (!ws['!merges']) ws['!merges'] = []ws['!merges'].push(utils.decode_range('B2:K2'))ws['!merges'].push(utils.decode_range('B3:K3'))ws['!merges'].push(utils.decode_range('B4:K4'))ws['!merges'].push(utils.decode_range('B5:K5'))ws['!merges'].push(utils.decode_range('A2:A5'))ws['!merges'].push(utils.decode_range('L2:L5'))// 设置列宽// cols 为一个对象数组,依次表示每一列的宽度if (!ws['!cols']) ws['!cols'] = []ws['!cols'] = [{ wpx: 70 },{ wpx: 118 },{ wpx: 118 },{ wpx: 118 },{ wpx: 118 },{ wpx: 118 },{ wpx: 118 },{ wpx: 118 },{ wpx: 118 },{ wpx: 118 },{ wpx: 200 },]// 设置行高// rows 为一个对象数组,依次表示每一行的高度if (!ws['!rows']) ws['!rows'] = []ws['!rows'] = [{ hpx: 0 },{ hpx: 40 },{ hpx: 15 },{ hpx: 15 },{ hpx: 20 },{ hpx: 20 },...Array.apply(null, { length: dataArr().length } as any).map(() => {return { hpx: 20 }}),]var wb = utils.book_new()utils.book_append_sheet(wb, ws, 'Sheet1')writeFile(wb, 'SheetJSVueAoO.xlsx')
}
</script><template><div><button @click="exportFile">单元格样式</button></div>
</template>

sheetJs / xlsx-js-style 纯前端实现导出 excel 表格及自定义单元格样式

十、项目地址

项目地址:https://github.com/aibujin/xlsx-js-style

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机视觉 | Kaggle】飞机凝结轨迹识别 Baseline 分享和解读(含源代码)

文章目录 一、导读二、比赛背景三、比赛任务四、比赛数据五、评价指标六、Baseline6.1 Training part6.2 Submission part 一、导读 比赛名称&#xff1a;Google Research - Identify Contrails to Reduce Global Warming https://www.kaggle.com/competitions/google-researc…

Jenkins工具系列 —— 启动 Jenkins 服务报错

错误显示 apt-get 安装 Jenkins 后&#xff0c;自动启动 Jenkins 服务报错。 排查原因 直接运行jenkins命令 发现具体报错log&#xff1a;Failed to start Jetty或Failed to bind to 0.0.0.0/0.0.0.0:8080或Address already in use 说明&#xff1a;这里提示的是8080端口号…

如何将本地的conda算法库打包到无网络的服务器用于部署

如何将本地的conda算法库打包到无网络的服务器用于部署 1、先安装conda-pack库&#xff0c;2、将本地的虚拟环境进行打包3、登录远程服务器&#xff0c;切换到conda安装目录&#xff0c;将本地生成的tar文件复制到该目录下4、新建文件夹&#xff0c;例如yus_env&#xff0c;这个…

WIN大恒工业相机SDK开发

大恒工业相机SDK开发概览 一、开发环境搭建1、C# 环境配置&#xff08;VS2019&#xff09;2、C 环境配置&#xff08;VS2019&#xff09;3、python 环境配置&#xff08;Pycharm&#xff09; 二、相机二次开发流程三、相机相机属性参数配置四、图像采集单帧采集回调采集 注意事…

码题集oj赛(第八次)——MT2179 01操作

一、题目 二、格式 三、样例 //输入&#xff1a; 4 10 1101 */-*-*-/*/ //输出&#xff1a; 10110注意&#xff1a; 四、代码实现 #include<bits/stdc.h> using namespace std; const int N 5e7 7; int n, m; char a[N], c; int main() {cin>>n>>m>…

list删除重复元素几种思路

文章目录 list删除重复元素几种思路hashsetStream流删除所有重复元素 list删除重复元素几种思路 hashset List<String> list2 new ArrayList<>();list2.add("a");list2.add("b");list2.add("a");Set<String> set new HashS…

SpringBoot整合redis集群实现读写分离(哨兵模式)

1 首先要在Linux虚拟机上安装redis # 安装包存放目录 cd /usr/local/redis # 下载最新稳定版 wget https://download.redis.io/releases/redis-6.2.6.tar.gz # 解压 tar -zxvf redis-6.2.6.tar.gz # 进入解压后的目录 cd /usr/local/redis/redis-6.2.6/ # 编译 make # 执行 &q…

Python 开发工具 Pycharm —— 使用技巧Lv.3

单步执行调试 1&#xff1a; 鼠标左键单击红点是断点行 2&#xff1a;甲虫样式是进行调试方式运行&#xff0c;鼠标左键单击点击 3&#xff1a; 单步运行图标&#xff0c;点击让程序运行一行 4&#xff1a; 步入步出&#xff0c;可以进入当前代码行函数内 5&#xff1a;重新运行…

分布式事务

事务是用户定义的一系列的数据库操作&#xff0c;这些操作可以视为一个完整的逻辑处理工作单元&#xff0c;要么全部成功&#xff08;全部执行&#xff09;&#xff0c;要么全部失败&#xff08;全都不执行&#xff09;&#xff0c;是不可分割的工作单元 分布式事务是指会涉及…

谷粒商城第九天-解决商品品牌问题以及前后端使用检验框架检验参数

目录 一、总述 二、商品分类问题 三、前端检验 四、后端检验 五、总结 一、总述 在完成完商品分类的时候&#xff0c;后来测试的时候还是发现了一些问题&#xff0c;现在将其进行解决&#xff0c;问题如下&#xff1a; 1. 取消显示的时候&#xff0c;如果取消了显示&…

Mybatis引出的一系列问题-spring多数据源配置

在日常开发中我们都是以单个数据库进行开发&#xff0c;在小型项目中是完全能够满足需求的。但是&#xff0c;当我们牵扯到像淘宝、京东这样的大型项目的时候&#xff0c;单个数据库就难以承受用户的CRUD操作。那么此时&#xff0c;我们就需要使用多个数据源进行读写分离的操作…

Qt中ffmpeg API存储和显示摄像头视频

Qt中ffmpeg API存储和显示摄像头视频的功能需要之前写的视频ffmpegAPI的视频播放的流程。 代码源码位置&#xff1a;https://download.csdn.net/download/qq_43812868/88157743?spm1001.2014.3001.5503 一、存储和显示摄像头的视频的流程 这是读取打开视频文件的流程&#x…

【c++】内存管理

C/C内存管理 C/C内存分布 一个简单题 先试试看吧&#xff0c;答案在文章末尾给出 选择题&#xff1a; 选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区) globalVar在哪里&#xff1f;____ staticGlobalVar在哪里&#xff1f;____ staticVar在哪里&#xff1f;____ localVar在…

【C++】开源:Eigen3矩阵与线性代数库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Eigen3矩阵与线性代数库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

problem(3):python IDE和python解释器

为什么写这篇文章呢&#xff1f;遇到了下面的问题&#xff0c;相同的解释器&#xff0c;如果运行angr库的代码&#xff0c;会出现 这样的情况&#xff0c;但是用spyder IDE 会显示正常&#xff0c;很奇怪 应该就是IDE的原因 IDE的循环导入问题 检查IDE配置&#xff1a; 如果可…

一百四十四、Kettle——Linux上安装的kettle8.2连接MySQL数据库

一、目的 在Linux上安装好kettle&#xff0c;然后用kettle连接MySQL数据库 注意&#xff1a;kettle版本是8.2 二、实施步骤 &#xff08;一&#xff09;到kettle安装目录下启动Linux的kettle服务 # cd /opt/install/data-integration/ # ./spoon.sh &#xff08;二&#x…

SpringBoot搭建WebSocket初始化

1.java后端的maven添加websocket依赖 <!-- websocket依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>2.实例化ServerEndpointExport…

踩坑(5)整合kafka 报错 java.net.UnknownHostException: 不知道这样的主机

java.net.UnknownHostException: 不知道这样的主机。 (5c0c3c629db9)at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:933) ~[na:na]at java.ba…

uniapp封装request请求

在基础文件里面创建一个api文件 在创建两个 js文件 http.js 里面封装 request 请求 let baseUrl https://white.51.toponet.cn; //基地址 export const request (options {}) > {//异步封装接口&#xff0c;使用Promise处理异步请求return new Promise((resolve, reject…

时间复杂度为O(nlogn)的两种排序算法

1.归并排序 归并排序的核心思想&#xff1a;如果要排序一个数组&#xff0c;我们先把数组从中间分成前后两部分&#xff0c;然后对前后两部分分别排序&#xff0c;再将排好序的两部分合并在一起&#xff0c;这样整个数组就都有序了。 归并排序使用的就是分治思想。分治&#x…