面试达人必备:精通sort函数,让数组排序变得游刃有余
- 问答
- 2025-09-15 19:16:33
- 1
📢 面试达人必备:精通sort函数,让数组排序变得游刃有余
最新动态 🚀(2025-09-15):
据最新《开发者技能调查报告》显示,85%的技术面试会考察候选人对数组排序的掌握程度,而sort()
函数因其灵活性和高频使用率,成为面试官最爱的考察点之一!无论是前端、后端还是算法岗,熟练使用sort()
都能让你在编码环节脱颖而出✨。
🔍 sort函数基础:快速入门
基本用法
sort()
是JavaScript数组的原生方法,默认按Unicode编码升序排列:
const fruits = ['banana', 'Apple', 'orange']; fruits.sort(); // ['Apple', 'banana', 'orange'](注意A的Unicode小于b)
⚠️ 陷阱:默认排序会将数字转为字符串再比较,导致[10, 2, 5].sort()
结果为[10, 2, 5]
!
自定义排序规则
通过传递比较函数(compareFunction),实现精准控制:
arr.sort((a, b) => a - b); // 数字升序 arr.sort((a, b) => b - a); // 数字降序
原理:
- 返回负数 →
a
排在b
前 - 返回正数 →
b
排在a
前 - 返回
0
→ 顺序不变
🎯 面试高频场景实战
对象数组排序
按对象属性排序(如按年龄升序):
const users = [ { name: 'Alice', age: 25 }, { name: 'Bob', age: 20 } ]; users.sort((a, b) => a.age - b.age);
多条件排序
先按年龄升序,年龄相同再按名字字母排序:
users.sort((a, b) => { if (a.age !== b.age) return a.age - b.age; return a.name.localeCompare(b.name); });
中文排序
使用localeCompare
解决中文编码问题:
const cities = ['北京', '上海', '广州']; cities.sort((a, b) => a.localeCompare(b, 'zh-CN'));
随机排序(洗牌算法)
面试可能要求手写数组乱序:
arr.sort(() => Math.random() - 0.5); // 简易版(非完全均匀)
💡 底层原理与性能优化
V8引擎的排序策略
- 短数组(≤10):使用插入排序(稳定)
- 长数组:快速排序(不稳定) + 插入排序优化
稳定性问题
sort()
在JS中不稳定(相同值可能换位),若需稳定排序可自行实现或使用库(如Lodash的_.sortBy
)。
时间复杂度
- 最优:
O(n log n)
- 最差:
O(n²)
(极端情况下,如数组已有序)
🚨 常见面试题与坑点
❓ 问题1:以下代码输出什么?
[null, undefined, 10, 1].sort();
答案:[1, 10, null, undefined]
(null
和undefined
会被排到最后)
❓ 问题2:如何实现不区分大小写的字母排序?
答案:
['Apple', 'banana'].sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()) );
📚 延伸学习资源
- MDN文档:Array.prototype.sort()
- 《算法导论》第8章:线性时间排序
掌握sort()
函数,不仅能轻松应对面试,更能提升日常开发效率!🎉 下次面试官让你“手写排序”时,记得微微一笑,优雅敲出arr.sort((a, b) => a - b)
~
本文由宜白风于2025-09-15发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://max.xlisi.cn/wenda/25778.html