面试-数组专项
> Last Format Time:6/12/2026 20:34:58
这个的优先级没有那么的高,可以放一放
数组去重:快速获取唯一值
在处理用户数据或API响应时,经常需要去除重复项。使用Set数据结构可以轻松实现:
const unique = (arr) => [...new Set(arr)];
这个单行代码利用了ES6的Set特性,将数组转换为Set自动去重,再展开为数组。
数组求和:简洁计算总和
计算数字数组的总和是常见需求,使用reduce方法可以一行搞定:
const sum = (arr) => arr.reduce((a, b) => a + b, 0);
这个方法通过累加器遍历数组元素,初始值为0,确保空数组也能正确返回0。
数组平均值:快速计算均值
在数据分析场景中,计算平均值是基本操作:
const average = (arr) => arr.reduce((a, b) => a + b, 0) / arr.length;
结合求和与数组长度,轻松得到平均值。
>🔄 数组变换与重组
数组分块:大数据分批处理
当需要将大数组分割成指定大小的块时:
const chunk = (arr, size) => arr.reduce((acc, e, i) => (i % size ? acc[acc.length - 1].push(e) : acc.push([e]), acc), []);
这个函数将数组按指定大小分块,适合分页加载或批量处理场景。
数组扁平化:处理嵌套结构
处理多层嵌套数组时,扁平化操作非常实用:
const flat = (arr) => arr.reduce((a, b) => (Array.isArray(b) ? [...a, ...flat(b)] : [...a, b]), []);
通过递归调用,可以处理任意深度的嵌套数组。
数组随机排序:洗牌算法
实现数组的随机排序(Fisher-Yates洗牌算法):
const shuffle = (arr) => arr.map(a => ({sort: Math.random(), value: a})).sort((a, b) => a.sort - b.sort).map(a => a.value);
这个技巧常用于随机展示内容或游戏开发中的洗牌操作。
> 🎯 数组查询与筛选
查找数组最大值/最小值
快速找到数组中的极值:
const max = (arr) => Math.max(...arr);
const min = (arr) => Math.min(...arr);
使用展开运算符配合Math方法,简洁高效。
数组过滤:移除假值
清理数组中的假值(false、null、undefined、0、NaN、""):
const compact = (arr) => arr.filter(Boolean);
利用Boolean函数的隐式转换,快速过滤无效数据。
数组交集与并集
处理多个数组的关系运算:
const intersection = (a, b) => a.filter(x => b.includes(x));
const union = (a, b) => [...new Set([...a, ...b])];
交集返回两个数组的共同元素,并集返回所有不重复元素。
> 📈 高级数组操作技巧
数组分组:按属性分类
根据对象数组的某个属性进行分组:
const groupBy = (arr, key) => arr.reduce((acc, obj) => ({...acc, [obj[key]]: [...(acc[obj[key]] || []), obj]}), {});
这个函数将对象数组按指定键值分组,返回分组后的对象。
数组转对象:键值对映射
将数组转换为键值对对象:
const toObject = (arr, key) => arr.reduce((acc, item) => ({...acc, [item[key]]: item}), {});
常用于将ID作为键的快速查找场景。
数组累积计算:累计求和
生成累积和数组:
const cumulativeSum = (arr) => arr.reduce((acc, n, i) => [...acc, n + (acc[i-1] || 0)], []);
这个函数返回一个新数组,每个元素是原数组到当前位置的累积和。
> 🚀 性能优化与最佳实践
数组克隆:避免引用问题
正确克隆数组,避免引用问题:
const clone = (arr) => [...arr]; // 浅拷贝
const deepClone = (arr) => JSON.parse(JSON.stringify(arr)); // 深拷贝
根据需求选择合适的克隆方式,浅拷贝适合简单数据,深拷贝适合嵌套对象。
数组去重(保持顺序)
在去重的同时保持原始顺序:
const uniqueOrdered = (arr) => arr.filter((item, index) => arr.indexOf(item) === index);
这个方法在去除重复项的同时,保留了第一次出现的顺序。
数组抽样:随机获取元素
从数组中随机抽取指定数量的元素:
const sample = (arr, n) => arr.sort(() => 0.5 - Math.random()).slice(0, n);
通过随机排序和切片,实现简单有效的随机抽样。
实用技巧与注意事项
性能考虑 对于大型数组,考虑使用for循环代替高阶函数以获得更好的性能 使用Set进行去重时要注意对象引用的比较 深拷贝大对象数组时,JSON方法可能不是最高效的选择 兼容性提示 ES6+语法(展开运算符、箭头函数)在现代浏览器中广泛支持 对于旧环境,可以使用Babel等工具进行转译 structuredClone是较新的API,需要检查浏览器兼容性 错误处理 在实际使用中,建议添加适当的错误处理:
const safeSum = (arr) => {
if (!Array.isArray(arr)) return 0;
if (arr.length === 0) return 0;
return arr.reduce((a, b) => a + b, 0);
};
版权声明:本文为CSDN博主「费念念Ross」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/gitblog_01086/article/details/151570511