理解sort中的比较函数

数组的sort()方法

sort()方法是数组自带的一种排序方法,为了实现排序sort方法会默认调用每个数组项的toString转型方法

然后比较得到的字符串

sort方法接收一个比较函数,比较函数有两个参数,如果第一个参数应该位于第二个参数之前则返回负数,如果相等返回0,如果第一个参数应该位于第二个参数之后则返回正数

1.当元素为字符串时

比较元素的第一位,第一位相同后比较第二位

var arr = ["cb","a","g","cy"];
arr.sort();
console.log(arr); //["a","cb","cy","g"]

2.当元素为数字时

默认将数字 当作字符串比较,先比较第一位,第一位相同时在比较后一位。

var arr2 = [20,13,11,8,0,11];
arr2.sort();
console.log(arr2); //[0,11,11,13,20,8]

3. 控制sort()方法的排序方式

var arr2 = [20,13,11,8,0,11];

//按升序排列

arr2.sort(function(a,b){
	//a,b表示相邻的两个元素
	//若返回值>0,数组元素将按升序排列
	//若返回值<0,数组元素将按降序排列
	return a-b; 
});
console.log(arr2); //[0,8,11,11,13,20]; 新数组按升序排列


//按降序排列

arr2.sort(function(a,b){
	//a,b表示相邻的两个元素
	//若返回值>0,数组元素将按升序排列
	//若返回值<0,数组元素将按降序排列
	return b-a; 
});
console.log(arr2); //[20,13,11,11,8,0]; 新数组按降序排列


//随机排序

arr2.sort(function(a,b){
	return Math.random()-0.5;  //返回值的正负概率分别为50%,故升降序排列是随机的
});
console.log(arr2); //新数组随机排序

理解sort中比较函数为什么返回a-b

 let arr = [1, 23, 3]

 // sort方法接收一个比较函数作为参数 
 arr.sort(function (a, b) {
   // 如果想要升序排列 
   // 假设 a 大于 b 所以 a 应该要位与 b 的后面 也就是 第一个参数要位于第二个参数之后
   // 根据比较函数的规则 第一个参数位于第二个参数之后返回 正数
   // 因为a大于b 所有a-b为正数 返回正数
   return a - b
 })
 
 console.log(arr);

sort方法通过某个属性值排序对象数组

    function getComputedFn(propertyName) {

      return function (obj1, obj2) {//比较函数中的参数来自于调用sort方法的原数组中的项
        // value1 和 value2 是两个number型
        let value1 = obj1[propertyName]
        let value2 = obj2[propertyName]
        if (value1 > value2) { //大的在前  降序
          return -1
        } else if (value1 < value2) {
          return 1
        } else {
          0
        }
      }
    }
    let arr = [
      { name: "Ajax", id: 3 },
      { name: "Java", id: 2 },
      { name: "Js", id: 5 },
      { name: "Python", id: 1 },
      { name: "Vue", id: 7 },
      { name: "Node", id: 9 }
    ]
    arr.sort(getComputedFn('id'));
    console.log(arr);
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页