从此无心爱良夜,任他明月下西楼

js数组sort()方法按指定顺序排序

一、sort介绍

数组的sort()方法可以把数组排序,

不传参数的默认按字典排序 sort()方法还接受一个回调函数,

按回调函数内代码逻辑排序 该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

比较函数应该具有两个参数 a 和 b,分别获取数组中前后相邻的两个数据。

若在排序后的数组中 a 应该出现在 b 之前,则返回一个小于等于 0 的值。也就是顺序不变。

若在排序后的数组中 a 应该出现在 b 之后,则返回一个大于 0 的值。也就是a,b交换位置。

let arr = [1,0,3,4,5]
arr = arr.sort((a,b) => a-b)

那么,arr就会按升序排列。

二、sort排序方法的灵活使用

除了默认不穿参数的按字典排序,还有直接相减的从小到大排序。还有几种比较好玩有用的排序。

1、按指定顺序排列。

例子:

let order = ['论坛','微信','微博']
let tableData=[{name:'微博',source:'weibo'},{name:'微信',source:'weixin'},{name:'论坛',source:'luntan'}]
tableData = tableData.sort((a, b) => {
return order.indexOf(a.name) - order.indexOf(b.name)
})
console.log(tableData)

 

 可以看到,这个排列顺序就是指定数组的顺序,可以用来整理数据。

例子中时是最理想的情况,指定数组与排序数组的长度相等,且每一项都存在。如果长度不等或缺失,还可以加一些逻辑判断,比如,不存在的时候indexOf的值一定是-1,必然交换顺序。或者指定数组包含全部情况,而排序数组只是其中一部分。

2、随机排列

随机的逻辑很简单,用Math.random()去生成随机数,决定是否要换位。可以用来打乱顺序。

let tableData=[1,2,3,4,5,6,7,8,9]
tableData = tableData.sort((a, b) => {
return Math.random() -0.5
})
console.log(tableData)

 

 可以看到两次输出结果是不一样的。

posted @ 2022-09-19 11:34  明月下  阅读(6396)  评论(0编辑  收藏  举报

页脚