sort的使用


在js中我们可以对数组元素使用sort方法进行排序,该方法不进行拷贝而是直接影响原数组,使用如下:

var arr =[0,1,56,23,34,3]
arr.sort()
console.log(arr)
//打印[0, 1, 23, 3, 34, 56]

发现结果竟然与预想不一样, 因为在使用sort排序的时候它总会使用第一个字符的ASCII值来进行比较排序。

1. 语法:

arr.sort([compareFunction])

参数解析:compareFunction(可选)用来指定按某种顺序进行排列的函数,该函数有两个参数:

  • firstEl 第一个比较的元素

  • secondEl 第二个比较的元素

2. 升序

//箭头函数简写
sort((a,b)=>a - b)

等价于

sort(function(a,b){
	if(a < b) {
		return -1;
	}
	if(a > b) {
		return 1;
	}
	if(a == b) {
		return 0;
	}
})

3. 降序

sort(function(a,b){
	return b - a;
})

等价于

sort(function(a,b){
	if(a < b) {
		return 1;
	}
	if(a > b) {
		return -1;
	}
	if(a == b) {
		return 0;
	}
})

4. 原理

其实他们原理一样的 回调函数形参a,b分别代表前后项。数值转为boolean类型时,true代表交换位置,否则不交换。

简写形式:

  • a-b 如果>0 转换为true 返回就会进行交换
  • a-b 如果<=0 转换为false 返回其位置保持不变

复杂形式:

  • 如果return返回-1,其位置保持不变
  • 如果return返回0,其位置保持不变
  • 如果return返回1,就会进行交换

5. 对象数组排序

var items = [
    { name: 'Edward', value: 21 },
    { name: 'Sharpe', value: 37 },
    { name: 'And', value: 45 },
    { name: 'The', value: -12 },
    { name: 'Magnetic' },//如果对象属性缺失会引发排序错误
    { name: 'Zeros', value: 37 }
];

//数值比较
items.sort(function (a, b) {
    return (a.value - b.value);
})

6. 字符串排序

// 字符串比较
items.sort(function (a, b) {
    //调用该方法的字符串转为大写形式并返回
    var nameA = a.name.toUpperCase();
    var nameB = b.name.toUpperCase();
    if (nameA < nameB) {
        return -1;
    }

    if (nameA > nameB) {
        return 1;
    }

    return 0;
});

文章作者: iamfugui
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iamfugui !
评论
  目录