建议11:增强数组排序的sort功能

  sort方法不仅按字母顺序进行排序,还可以根据其他顺序执行操作.这时就必须为方法提供一个比较函数的参数,该函数要比较两个值,然后返回一个用于说明这两个值得相对顺序的数字.比较函数应该具有两个参数a和b,其返回值如下:

  1. 如果根据自定义评判标准,a小于b,在排序后的数组中a应该出现在b之前,就返回一个小于0的值
  2. 如果a等于b,就返回0
  3. 如果a大于b,就返回一个大于0的值

  下面的示例中,将根据比较函数来比较数组中每个元素的大小,并按从小到大顺序排序

function f(a,b){
  return (a-b)
}
var a = [4,3,5,6,7,3,6,8]
a.sort(f)
console.log(a); //[3, 3, 4, 5, 6, 6, 7, 8]

如果是从大到小,则让返回值取反就好

function f(a,b){
  return -(a-b)
}
var a = [4,3,5,6,7,3,6,8]
a.sort(f)
console.log(a);  //[8, 7, 6, 6, 5, 4, 3, 3]

(1) 根据奇偶性值排列数组

  sort方法用法比较灵活,但更灵活的是对比较函数的设计.例如:要根据奇偶数顺序排列数组,只需要判断比较函数中两个参数是否为奇偶数,并决定排列顺序

function f(a,b){
  var a = a%2
  var b = b%2
  if(a==0) return 1
  if(b==0) return -1
}


var a = [3,1,2,4,5,7,6,8,0,9]
a.sort(f)
console.log(a);  //[3, 1, 5, 7, 9, 0, 8, 6, 4, 2]

  sort方法在调用比较函数时,将每个元素值传递给比较函数,如果元素值为偶数,则保留其位置不动,如果元素值为奇数,则调换参数a和b的显示顺序,从而实现数组中所有元素执行奇偶排序.

(2) 不区分大小写排序字符串

如果不希望区分字母大小,也就是说大写字母和小写字母按相同顺序排列

function f(a,b){
  var a = a.toLowerCase;
  var b= b.toLowerCase;
  if(a<b){
    return 1
  }else{
    return -1
  }
}
var  a = ['aB','Ab','Ba','bA']
a.sort(f)
console.log(a);  // ["aB", "Ab", "Ba", "bA"]

(3) 把浮点数和整数分开排列

function f(a,b){
  if(a>Math.floor(a)){
    return 1
  }
  if(b>Math.floor(b)){
    return -1
  }
}

var a  = [3.555,3,2.111,5,7,3]
a.sort(f)
console.log(a);  //[3, 5, 7, 3, 2.111, 3.555]
posted @ 2019-12-24 17:45  KIU的博客  阅读(236)  评论(0编辑  收藏  举报