sort() 方法对数组中的元素进行适当排序并返回数组。这种情况不一定稳定。默认排序顺序根据字符串 Unicode 代码点。
目录
升序降序排序法
对象可以按照某个属性排序
const months = ['March', 'Jan', 'Feb', 'Dec']
months.sort() // ['Dec', 'Feb', 'Jan', 'March']
console.log(months) // ["Dec", "Feb", "Jan", "March"]
const arr = [1, 30, 4, 21, 100000]
arr.sort()
console.log(arr) // [1, 100000, 21, 30, 4]
我们可以向
sort
方法传入一个指定按某种顺序进行排列的函数。
升序降序排序法
// 按升序排序 从小到大排
arr.sort((a, b) => a - b) // [1, 4, 21, 30, 100000]
// 按降序排序 从大到小排
arr.sort((a, b) => b - a) // [100000, 30, 21, 4, 1]
注意:该方法会改变原数组。
在使用 Array.prototype.sort() 方法时,我们需要注意两点
该方法默认会把数组中的所有元素先转换为 String 再排序。
字符串根据 ASCII 码进行排序。
const months = ['March', 'Jan', 'Feb', 'Dec']
months.sort()
console.log(months) // ["Dec", "Feb", "Jan", "March"]
const arr = [1, 30, 4, 21, 100000]
array1.sort()
console.log(arr) // [1, 100000, 21, 30, 4]
可以看到,原始值数组在排序时,会根据上面两点提到的规则进行排序。我们该如何解决?往下看。
Array.prototype.sort() 是一个高阶函数,他可以传入一个指定按某种顺序进行排列的函数。
对象可以按照某个属性排序
根据不同的场景,您可能需要按键、值或日期字段对 JavaScript 数组对象进行排序。
使用 Array.prototype.sort() 和 String.prototype.localeCompare() 对字符串数据进行排序。
let arr = [
{ name: 'HTML', dataTime: '1999-01-20' },
{ name : 'JavaScript', dataTime: '2023-07-22' },
{ name : 'CSS', dataTime: '2020-08-20' }
]
//按时间排序
const sortData = (data, order = 'asc') => {
if(order == 'asc'){
return data.sort((a, b) => a.dataTime.localeCompare(b.dataTime))
} else {
return data.sort((a, b) => b.dataTime.localeCompare(a.dataTime))
}
return data
}
console.log(sortData(arr))
示例2:
let arr2 = [{
id:'001',
name: 'HTML',
dataTime: '1999-01-20'
},
{
id:'003',
name: 'JavaScript',
dataTime: '2023-07-22'
},
{
id:'004',
name: 'vue',
dataTime: '2022-08-20'
},
{
id:'002',
name: 'CSS',
dataTime: '2020-08-20'
},
]
const sortData2 = (data, order = 'asc') => {
if (order == 'asc') {
return data.sort((a, b) => a.id -b.id)
} else {
return data.sort((a, b) => b.id -a.id )
}
return data
}
console.log(sortData2(arr2))
更多内容可查阅数组方法合集 数组方法