最新要闻
- 世界快资讯丨《流浪地球2》公布星尘海报:人类的勇气永刻星空
- 全球快播:原因不服不行 大巴黎官方:我们已锁定世界杯冠军!梅西/姆巴佩争金靴
- 世界热讯:《死侍3》确认为R级!休·杰克曼将回归饰演金刚狼
- 环球快报:奇瑞SUV颜值天花板!俄罗斯花滑“千金”喜提OMODA C5:定制车身
- 微头条丨工资加倍都招不到人!官方要求北京快递业人员应返岗尽返岗
- 最强护眼屏!moto X40蓝光占比远低于行业均值
- 当前速看:为了让人多下游戏?特斯拉推出1TB车规级固态硬盘
- 世界实时:奥迪新车开了半小时咚咚响 4S店换零件车主想换车
- 当前看点!5年研发投入1000亿!小米发布首部知识产权白皮书:授权专利超2.9万项
- 每日速读!Redmi K60要用上陶瓷/素皮了?卢伟冰在线征集偏好:陶瓷第一
- 当前视点!人类核聚变取得突破性进展:什么是核聚变、重要吗?
- 【热闻】闷声发大财 奇瑞第四代混动专用1.5L发动机下线:油耗大降
- 世界微头条丨7单元发声设计!小米Sound Pro智能音箱开售 首发999元
- 世界最新:小米13 Pro绝配!小米50W立式风冷无线充Pro图赏
- 全球热议:跑分突破133万!努比亚Z50《原神》半小时稳成直线
- 脑筋急转弯什么人不怕冷?脑筋急转弯什么狗不会叫的5种答案是什么?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界热点评!第一百一十三篇: JS数组Array(二)数组方法 栈、队列、排序
好家伙,
【资料图】
在上一篇中,我们知道了,
JS的数组中每个槽位可以存储任意类型的数据
那么,我们能通过数组去模仿某些数据结构吗?
答案是肯定的
1.栈方法
ECMAScript 给数组提供几个方法,让它看起来像是另外一种数据结构。
数组对象可以像栈一样,也就是一种限制插人和删除项的数据结构。
栈是一种后进先出(LIFO,Last-In-First-Out)的结构,也就是最近添加的项先被删除。
数据项的插入(称为推入,push)和删除(称为弹出,pop)只在栈的一个地方发生,即栈顶。
ECMAScript数组提供了push()和pop()方法,以实现类似栈的行为。push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度。
pop()方法则用于删除数组的最后一项,同时减少数组的1ength值,返回被删除的项。
用法示例:
let colors = ["red", "blue", "green"]; //定义一个字符串数组let cpush = colors.push("black");console.log(colors,cpush);let cpop = colors.pop();console.log(colors,cpop);
(这张图,没有十年画工画不出来)
2.队列方法
2.1.正队列
就像栈是以LIFO形式限制访问的数据结构一样,队列以先进先出(FIFO,First-In-First-Out)形式限制访问。
队列在列表末尾添加数据,但从列表开头获取数据。
因为有了在数据末尾添加数据的push()方法,所以要模拟队列就差一个从数组开头取得数据的方法了。
这个数组方法叫shift(),它会删除数组的第一项并返回它,然后数组长度减1。
使用shift()和push(),可以把数组当成队列来使用
用法示例:
let colors = ["red", "blue", "green"]; //定义一个字符串数组let cpush = colors.push("black");console.log(colors,cpush);let cshift = colors.shift();console.log(colors,cshift);console.log(colors,colors.shift());
2.2.逆队列
ECMAScript也为数组提供了unshift()方法。
顾名思义,unshift()就是执行跟shift()相反的操作:在数组开头添加任意多个值,然后返回新的数组长度。
通过使用 unshift()和pop(),可以在相反方向上模拟队列,即在数组开头添加新数据,在数组末尾取得数据,
用法示例:
let colors = ["red", "blue", "green"]; //定义一个字符串数组let cunshift = colors.unshift("black");console.log(colors,cunshift);let cpop = colors.pop();//将出队元素重新插回队头colors.unshift(cpop);console.log(colors,cpop);console.log(colors,colors.pop());
(这张图,没有十年画工画不出来)
3.排序方法
数组有两个方法可以用来对元素重新排序:reverse()和sort()。
3.1.reverse()反转数组方法
顾名思义,reverse()方法就是将数组元素反向排列。
用法示例:
let colors = ["red", "blue", "green"]; //定义一个字符串数组colors.reverse();console.log(colors);
(貌似一些基础面试题会有类似的题目,叫你去反转某个数组,这么干就对了)
3.2.sort()排序方法
按照官方的说法,这是一个排序方法,
默认情况下,sort()会按照升序重新排列数组元素,即最小的值在前面,最大的值在后面。
为此,sort()会在每一项上调用string()转型函数,然后比较字符串来决定顺序。
但他并不总是能得到正确的排序
let colors = [99999,99,999,9999,9]; colors.sort();console.log(colors);colors_1 =[9, 99, 999, 9999, 99999];colors_1.sort();console.log(colors_1);colors_2 =[0,1,5,10,15];colors_2.sort();console.log(colors_2);
这里我们可以看到,第三个例子的排序错误了
为此,sort()方法可以接收一个比较函数,用于判断哪个值应该排在前面.
比较函数接收两个参数,
(1) 如果第一个参数应该排在第二个参数前面,就返回负值;
(2) 如果两个参数相等,就返回0;
(3) 如果第一个参数应该排在第二个参数后面,就返回正值。
function compare_1(valuel, value2){ if (valuel < value2){ return -1; } else if (valuel > value2) { return 1; } else{ return 0; }}
返回-1就不进行交换,返回1将对两个值对调
colors_2 = [0, 1, 5, 10, 15];//从小到大排序function compare_1(valuel, value2){ if (valuel < value2){ return -1; } else if (valuel > value2) { return 1; } else{ return 0; }}//从大到小排序function compare_2(valuel, value2){ if (valuel < value2){ return 1; } else if (valuel > value2) { return -1; } else{ return 0; }}console.log(colors_2.sort(compare_1));console.log(colors_2.sort(compare_2));
如果数组的元素是数值,或者是其valueOf()方法返回数值的对象(如Date对象),这个比较函数还可以写得更简单,
更简便的写法:
colors_2 = [0, 1, 5, 10, 15];function compare_3(value1, value2){ return value2-value1;}function compare_4(value1, value2){ return value1-value2;}console.log(colors_2.sort(compare_3));console.log(colors_2.sort(compare_4));
怎么说呢,感觉这个sort()设计的并不是很好,用起来并不是那么的方便,
要排序的话,或许直接写一个冒泡排序或者快速排序可以解决?
又或者是开发者故意开放一个比较函数来让我们编辑的?
JS-数组sort方法用的是哪种排序算法 - 简书 (jianshu.com)
等有了更多知识储备再来回答吧
世界热点评!第一百一十三篇: JS数组Array(二)数组方法 栈、队列、排序
世界快资讯丨《流浪地球2》公布星尘海报:人类的勇气永刻星空
全球快播:原因不服不行 大巴黎官方:我们已锁定世界杯冠军!梅西/姆巴佩争金靴
世界热讯:《死侍3》确认为R级!休·杰克曼将回归饰演金刚狼
环球快报:奇瑞SUV颜值天花板!俄罗斯花滑“千金”喜提OMODA C5:定制车身
微头条丨工资加倍都招不到人!官方要求北京快递业人员应返岗尽返岗
环球时讯:行业方案 | 新规落地,企业集团财务公司如何构建数智财务体系?
环球实时:模板层之标签 自定义模板语法 模板的继承与导入 搭建测试环境 ORM常用关键字
最强护眼屏!moto X40蓝光占比远低于行业均值
当前速看:为了让人多下游戏?特斯拉推出1TB车规级固态硬盘
世界实时:奥迪新车开了半小时咚咚响 4S店换零件车主想换车
当前看点!5年研发投入1000亿!小米发布首部知识产权白皮书:授权专利超2.9万项
每日速读!Redmi K60要用上陶瓷/素皮了?卢伟冰在线征集偏好:陶瓷第一
微头条丨Prometheus技术分享——如何监控宿主机和容器
当前视点!人类核聚变取得突破性进展:什么是核聚变、重要吗?
【热闻】闷声发大财 奇瑞第四代混动专用1.5L发动机下线:油耗大降
世界微头条丨7单元发声设计!小米Sound Pro智能音箱开售 首发999元
世界最新:小米13 Pro绝配!小米50W立式风冷无线充Pro图赏
全球热议:跑分突破133万!努比亚Z50《原神》半小时稳成直线
天天关注:学习 Shell准没错
天天速讯:Python3 编程面试题
焦点讯息:快递代拿项目 (第十组)终稿
焦点速看:面试题:浏览器输入 URL 后回车发生了什么?
破坏系统是为了更稳定?混沌工程在去哪儿的 4 个阶段实践
世界观点:产品分享:Qt鸿图电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0
win7游戏不能全屏怎么解决?win7游戏不能全屏解决方法有哪些?
酷狗可以下载歌词吗?酷狗怎么下载歌词?
itunes怎么制作铃声?itunes备份文件在哪里?
chrome是什么浏览器?chrome文件夹可以删除吗?
在Excel中如何排序?excel中身份证号码怎么全部显示?
天天快看:Visual Studio下创建MFC项目,并结合OpenGL实现一个小程序
环球新动态:Go适合做什么?为何这么多人偏爱Go语言?
快消息!【脚本项目源码】Python制作艺术签名生成器,打造专属你的个人艺术签名
北桥温度高的原因有哪些?北桥温度高有什么影响?
手机通话清单怎么查询?手机通话清单怎么清除?
支付宝沾沾卡怎么获得?支付宝沾沾卡怎么使用?
华为路由a1是千兆吗?华为路由a1怎么重新设置?
微信故障是什么原因?微信故障怎么修复?
脑筋急转弯什么人不怕冷?脑筋急转弯什么狗不会叫的5种答案是什么?
经常请吃饭的漂亮姐姐插曲有哪些?经常请吃饭的漂亮姐姐剧情介绍
x战警范冰冰扮演的是什么角色?x战警范冰冰是哪一部
前端跨域
MySQL 行溢出
springboot+vue 若依项目在windows2008R2企业版部署流程
环球视点!SpringCloud-Nacos学习笔记
铝合金铸造工艺有哪些?铝合金铸造工艺流程
苦主是什么意思?苦主引申含义是什么?
世界微速讯:上网认证(锐捷睿易篇)
当前快看:JNPF3.4.5消息模块:多渠道应用,配置灵活多样,满足更多使用场景
【环球热闻】基于汉兰达开发而来 雷克萨斯TX效果图曝光:竟与奇瑞星途“撞衫”
微软正式放弃Win10 21H1!将无法收到任何安全更新或补丁
亚米级的高精度定位 高德北斗卫星日定位量已超2100亿次
不枉马粉苦等一场 全新马自达CX-90预告:六缸、后驱全都有
【全球快播报】对标迈巴赫S级!蔚来百万级豪车计划落地 售价百万
SAP根据源码导入/ui2/cl_json类
Docker 安装,常用命令
【当前独家】告别LCD/mini LED iPad Pro全系升级到OLED屏
全球快资讯:高端成了!小米12S Ultra被中国移动评为4000元以上最强旗舰
视点!果粉霸气!花万元同时入手小米13和13 Pro:之前用的是iPhone 14 Pro Max
火箭平民化!中国民营火箭朱雀二号即将首飞:人类首次挑战甲烷燃料
小米13系列刷新认知 卢伟冰6字评价:彻底脱胎换骨
快讯:3999元起!小米13今日开售:手感、续航碾压iPhone 14 Pro
消息称苹果要对iOS开放 iPhone等自由了:功能、应用商店向第三方放开
苹果推送iOS 16.2正式版:新增无边记、Apple Music唱歌
阿根廷3-0克罗地亚晋级决赛!梅西创纪录之夜:成现役世界杯射手王
后退N帧协议(GBR)
环球新资讯:taro 编译报:模块引入顺序不一致报错
环球微动态丨主持人邀请世界首富马斯克登台后 现场嘘声一片:尴尬到家
前沿资讯!科幻美剧《西部世界》凉凉!将被彻底下线:美国都不能播了
播报:美国宣布首次实现“核聚变点火”!终于不再“赔本”了
短讯!RX 7900 XT/XTX首发开卖几分钟告罄!黄牛炒疯了:两倍溢价
每日观点:阿根廷时隔四年再战克罗地亚!半决赛现场将播放陈奕迅《孤勇者》
焦点讯息:前端入门教程:CSS标准盒模型和怪异盒模型区别
世界新资讯:卡梅隆力荐!《阿凡达:水之道》CINITY版明日点映:我国自主研发
啥?青岛海边能捡到帝王蟹引围观 网友称赚大 专家解答:不是帝王蟹
世界短讯!神舟十四号航天员摄影作品展:16个地方你认识多少?
《三体》动画爆火 “三体宇宙”能成中国版“漫威宇宙”吗?
每日短讯:Django框架:3、Django请求生命周期(重要)
环球微头条丨全年零事故率!换换智能换电解决电动车最大安全隐患
暴雪与新代理展开洽谈 魔兽等国服谁接?网易偷笑 新版号这难题无解
当前热文:一加11R参数曝光:6.7寸120Hz屏、搭载红外传感器
1*5 句话月考游寄
快资讯:女子下班回家发现2千万豪宅“塌了”:科普何为毛细管网
国际乒联服务器出问题 马龙、樊振东等信息遭泄漏
《暗黑破坏神4》IGN前瞻来了!堪称《暗黑2》超级强化版
环球新动态:被马斯克预言“倒闭” Lucid开始在华招人:明年国内销售
观速讯丨canvas处理切图并旋转图片
天天播报:MIUI 14上手:系统瘦身 更流畅了
天天快讯:不靠CG!诺兰新片《奥本海默》实拍还原第一颗原子弹爆炸场面
【时快讯】花几百亿“烧一壶开水” 美国是不是有“大病”?
国外发现马航MH370起落架残骸:或成蓄意坠毁关键证据
https代理服务器(一)问题引出
观点:路由分发 路由别名的名称空间 虚拟环境 HTTPresponse JsonResponse request对象获取文件 CBV源码剖析 模板语法传值特性
世界要闻:做7秒动画赢13W大奖?总奖池超80W、国内最火爆的3D渲染动画创作大赛开始报名!
全球今热点:iPhone 15拍照值得期待!苹果CEO库克拜访索尼传感器工厂
当前快看:iPad 10耐用性测试:惨遭一掰两半!质量堪忧
中国卫星拍的第一批太阳照片公布!你看懂了吗?
今日讯!MIUI 14脱胎换骨 张宇:梦回MIUI 9快如闪电的感觉
甄子丹主演 新大片《天龙八部之乔峰传》定档:宣传中国武侠
热资讯!字符串相关类