ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1043|回复: 0

[原创] JSA代码分享——数组排序、最值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-12-5 11:41 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 imnnoii 于 2021-12-5 11:53 编辑

本贴主要内容:

如何快速初始化一个有一定规律的数组

如何排序数组

尝试理解sort()方法的回调函数


如果你在VBA中要对一个数组内进行排序,那么可能需要循环或者其他奇怪的技巧。

但是在JSA中,数组有他自己的对象方法:array.sort(sortfunction)。
一般情况下我们并不需要其中的sortfunction,直接使用.sort()后原始数组将会被排序。是的!使用.sort()方法后会直接改变原始数组,并不会形成一个新的副本。

下面的代码会对arr进行.sort方法后,arr数组顺序被改变,并且浅拷贝给了brr(我们对brr修改同样会影响到arr)

  1. let arr = ["a","c","e","d","f",1,4,3,11];
  2. let brr = arr.sort();
  3. Console.log(JSON.stringify(arr));//[1,11,3,4,"a","c","d","e","f"]
复制代码

很遗憾你可能看到了,虽然会对于字母排序并没有什么问题,但是对于数字,11却排在3的前面。在没有使用sortfunction时sort默认排序我们可以简单的理解为按照首字母排序(实质并不是这么简单),数字在默认情况下也会按照字母的方式去处理。我们可以加入一个简单的箭头函数去让它正确排序。

  1. function ArrSort(){
  2.     let arr = [];
  3.     for(let i = 0;i < 10 ;arr[i++] = 2*i+2**i);//建立一个以等差与等比数之和为项的数列为数组
  4.     arr.sort();
  5.     Console.log(JSON.stringify(arr));
  6.     //[1044,14,142,24,272,4,42,530,76,8]
  7.     arr.sort((a,b) => a - b );
  8.     Console.log(JSON.stringify(arr));
  9.     //[4,8,14,24,42,76,142,272,530,1044]
  10. }
复制代码
  1. (a,b) => a - b;       //箭头函数用于给sort()返回a-b (<0,=0,>0)。当<0 时a 会被排在b 前面。
复制代码

所以我们在箭头函数 返回 a - b时 将会以升序排列。如果想降序,只需要改为 b - a 即可。这是个简单的数学问题。

排序后自然能够很轻松的取得最值。如果时升序,那么第一个元素就是最小值,最后一个元素就是最大值。

但是!

JSA中并不需要绕圈圈,在上面的代码结尾加上下面的代码。

  1. let maxInArr = Math.max(...arr);
  2. Console.log(maxInArr) //1044
复制代码

我们可以直接用“...”将arr展开,放入Math的max()方法取得最大值。

Math有很多方法很实用,往君学习。

回调函数也可以有很多很复杂的规则,但是最终返回值请以-1,0,1的情况返回。它将规定sort的升序降序。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 00:55 , Processed in 0.044413 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表