sort()的用法

今天面试的时候,被问到:给一个数组,怎么随机打乱数组。当时被问到的时候第一时间想到了Math.random()的方法,即用random产生在数组长度以内的下标值,可是这样的话,怎么控制产生下标不会重复呢,所以我又想到了set,将每一次产生的下标保存到set中,产生跟数组相同长度的集合,这样来打乱数组。然而这种做法有很大很大的问题,因为random是随机产生数据,可能执行了无数n次才能得到固定长度的集合,所以这种很不可行。然后突然想到取余的方法就脱口而出了,因为隐约记得取余是可以的,可是怎么一个mod法自己还没想到。所以当面试官问到怎么取余的时候自己也答不上来了。后来面试官提示了一下有没有想到sort()方法(面试官还是挺好的),然而我还是丝毫无头绪,sort()不就是排序的么,自己一直以为他的用法是arr.sort()来排序且是升序的。这是自己对sort()的一个误区。所以回来就百度了一下怎么随机打乱数组,没想到竟然使用sort()!!!一脸惊讶,原来sort()还可以这样子用的,赶快查阅了sort()的用法,并记下这篇博客。


首先,sort()方法是对数组进行排序并返回数组的一个方法。默认排序是根据字符串的unicode码点的(这个后面会解释是怎样的)。
语法:arrayObject.sort(compareFunction),这个compareFunction参数是可选的,是规定排序顺序,且必须是函数。
如果调用sort()方法时没有使用参数,即arr.sort(),则将按照字符的unicode编码的顺序排序。
下面这个例子可以说明:
var arr = [1,12,5,34,3,52,45,4];
arr.sort();


输出:
[1, 12, 3, 34, 4, 45, 5, 52]

为什么这样呢,是因为在unicode中指针顺序中"12"在"3" 之前。


如果想要升序或者降序或者说我们这里随机的方式来排序,就需要指明compareFunction函数了。方式如下:

(1)如果compareFunction(a,b)的返回值小于0,那么a会被排列到b之前;

(2)如果compareFunction(a,b)的返回值等于0,a和b的相对位置不变;(es标准并不保证这一行为,而且也不是所有浏览器都会遵守的,例如Mozilla在2003年之前的版本)

(3)如果compareFunction(a,b)的返回值大于0,那么a会被排列到b之后。

比较函数的格式如下:

function compare(a, b) {
  if (a < b ) {           // 按某种排序标准进行比较, a 小于 b
    return -1;
  }
  if (a > b ) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

具体的sort()的用法,可以看下面这个链接,讲的很详细。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort


下面就说如何随机打乱数组吧:

var arr = [1,12,5,34,3,52,45,4];
arr.sort(function(a,b) {
	return Math.random()>0.5?1:-1;
});

以上。。。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值