JS在函数作为参数传递时加括号与不加括号的区别以及sort()排序的实现

今天在研究sort的内部实现中,发现sort()在调用比较函数compare的时候,传入的是compare,由于我在调用的时候,一直写的sort(compare()),导致输出结果与预期不符合,后面看了书上的例子发现原来是sort(compare),如下
1、sort(compare())

function compare(n1,n2){
  if(n2>n1){
      return 1
  }
  else if(n2<n1){
      return -1
  }
  else{
      return 0
  }
}
var values=[0,15,5,10]
values.sort(compare())

console.log(values);//[0, 10, 15, 5]

1、sort(compare)

function compare(n1,n2){
  if(n2>n1){
      return 1
  }
  else if(n2<n1){
      return -1
  }
  else{
      return 0
  }
}
var values=[0,15,5,10]
values.sort(compare)

console.log(values);//[15, 10, 5, 0]

为什么会这样呢,其实是因为在调用函数时,加括号和不加括号是有区别的,加括号表示传入的参数是调用函数的结果,不加括号传入的参数是函数对象,也就是整个函数体,所以两次运行结果不同。
除此之外,对于sort()函数也需要说明,sort()会调用每一项的toString()方法,再比较所得到的字符串,所以有以下结果:

var values=[0,15,5,10]
values.sort()
console.log(values);//[0, 10, 15, 5]

因此,想要实现对数组数值的排序,需要传入一个比较函数,实现对数值的比较。
升序:

function compare(n1,n2){
 return n1-n2;
}
var values=[0,15,5,10]
values.sort(compare)

console.log(values);//[0, 5, 10, 15]

降序:

function compare(n1,n2){
 return n2-n1;
}
var values=[0,15,5,10]
values.sort(compare)

console.log(values);//[15, 10, 5, 0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值