Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/面试/代码

面试-数组专项

4 分钟阅读 · Note

目录树 578 篇

          • 面试-常考经典1
          • 面试-常考经典2
          • 面试-数组专项
        • 可投递企业
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗面试-常考经典1同一路径↗面试-常考经典2同一路径↗5 最长回文子串 ⌚️共同主题↗解析模板字符串共同主题↗牛客 101共同主题↗数组&字符串技巧共同主题
  • 面试-数组专项

面试-数组专项

> 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