Array.prototype.sort()
Array.prototype.sort()
返回值:排序后的数组
- 无参情况
let one = ['FBI', 'abc', 'cba', 'NBA']
console.log(one.sort());
// ['FBI', 'NBA', 'abc', 'cba']
// 无参:按照 Unicode 编码进行排序,str.charCodeAt() 可查看字符串指定位置的 Unicode 编码
let two = [1, 10000, 3, 4, 9, 80]
console.log(two.sort());
// [1, 10000, 3, 4, 80, 9]
// 因为没有指定参数,所以按照 Unicode码 排序
有参情况,首先得明白一点:大于0则调换位置,否则不换。并且有参情况你必须得给它返回一个Number类型的值,你不能粗心用字符串相加减
- 对数字排序
let numbers = [4, 3, 5, 1, 3]
numbers.sort((a, b) => a - b)
console.log(numbers); //[ 1, 3, 3, 4, 5 ]
// 所以他们说a-b一定是升序是有道理的
// 因为若 a-b>0
// 则 a > b
// 又因为 a-b>0
// 所以得调换位置
// 把 b 调换到前面,自然小的就在前面
numbers.sort((a, b) => b - a)
console.log(numbers); //[ 5, 4, 3, 3, 1 ]
// 若 b - a > 0
// 则 b > a
// 又因为 b - a > 0
// 则 b 调到 a 的前面
// 即大的在前,小的在后,降序
- 根据对象属性排序
let items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Zeros', value: 37 }
];
items.sort(function (a, b) {
return a.value - b.value
})
console.log(items);
//[
// { name: 'The', value: -12 },
// { name: 'Edward', value: 21 },
// { name: 'Sharpe', value: 37 },
// { name: 'Zeros', value: 37 },
// { name: 'And', value: 45 }
//]
- 根据对象属性排序2
let items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'Magnetic' },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Zeros', value: 37 }
];
items.sort(function (a, b) {
return a.value - b.value
})
console.log(items);
//[
// { name: 'Edward', value: 21 },
// { name: 'Sharpe', value: 37 },
// { name: 'Magnetic' },
// { name: 'The', value: -12 },
// { name: 'Zeros', value: 37 },
// { name: 'And', value: 45 }
//]
//没有指定属性的会保持在原来位置不动,因为迭代器会跳过它,并且它就像一堵墙一样,把前后都隔开了,你发现没有,-12在那堵墙后面排第一个
- 根据对象属性排序3
let 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((a, b) => (a.name > b.name ? 1 : -1)) //规则就是规则,你必须给它返回一个Number类型的数据
//因为数字排序相减能得出一个大于0或小于0的数,但是字符串相减的话,不能得出一个大于或小于0的数,必须手动指定
console.log(items);
// [
// { name: 'And', value: 45 },
// { name: 'Edward', value: 21 },
// { name: 'Magnetic' },
// { name: 'Sharpe', value: 37 },
// { name: 'The', value: -12 },
// { name: 'Zeros', value: 37 }
// ]
- 根据对象属性进行排序4,封装一下
let arr = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic' },
{ name: 'Zeros', value: 37 }
]
function byField(fieldName) {
function asd(a, b) {
return a[fieldName] > b[fieldName] ? 1 : -1
}
return asd
}
arr.sort(byField('name'))
console.log(arr);
这一路,灯火通明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现