本帖最后由 imnnoii 于 2021-12-5 11:53 编辑
本贴主要内容: 如何快速初始化一个有一定规律的数组 如何排序数组 尝试理解sort()方法的回调函数
如果你在VBA中要对一个数组内进行排序,那么可能需要循环或者其他奇怪的技巧。 但是在JSA中,数组有他自己的对象方法:array.sort(sortfunction)。
一般情况下我们并不需要其中的sortfunction,直接使用.sort()后原始数组将会被排序。是的!使用.sort()方法后会直接改变原始数组,并不会形成一个新的副本。
下面的代码会对arr进行.sort方法后,arr数组顺序被改变,并且浅拷贝给了brr(我们对brr修改同样会影响到arr) - let arr = ["a","c","e","d","f",1,4,3,11];
- let brr = arr.sort();
- Console.log(JSON.stringify(arr));//[1,11,3,4,"a","c","d","e","f"]
复制代码很遗憾你可能看到了,虽然会对于字母排序并没有什么问题,但是对于数字,11却排在3的前面。在没有使用sortfunction时sort默认排序我们可以简单的理解为按照首字母排序(实质并不是这么简单),数字在默认情况下也会按照字母的方式去处理。我们可以加入一个简单的箭头函数去让它正确排序。 - function ArrSort(){
- let arr = [];
- for(let i = 0;i < 10 ;arr[i++] = 2*i+2**i);//建立一个以等差与等比数之和为项的数列为数组
- arr.sort();
- Console.log(JSON.stringify(arr));
- //[1044,14,142,24,272,4,42,530,76,8]
- arr.sort((a,b) => a - b );
- Console.log(JSON.stringify(arr));
- //[4,8,14,24,42,76,142,272,530,1044]
- }
复制代码- (a,b) => a - b; //箭头函数用于给sort()返回a-b (<0,=0,>0)。当<0 时a 会被排在b 前面。
复制代码所以我们在箭头函数 返回 a - b时 将会以升序排列。如果想降序,只需要改为 b - a 即可。这是个简单的数学问题。 排序后自然能够很轻松的取得最值。如果时升序,那么第一个元素就是最小值,最后一个元素就是最大值。 但是! JSA中并不需要绕圈圈,在上面的代码结尾加上下面的代码。 - let maxInArr = Math.max(...arr);
- Console.log(maxInArr) //1044
复制代码我们可以直接用“...”将arr展开,放入Math的max()方法取得最大值。 Math有很多方法很实用,往君学习。 回调函数也可以有很多很复杂的规则,但是最终返回值请以-1,0,1的情况返回。它将规定sort的升序降序。 |