当前位置: 首页 > news >正文

基础不牢,AI 无用;思维到位,一行胜千行

前几篇文章,我一直在「往上走」。

从序章的 Vibe Coding + 提示词工程,到 Claude Code 工程掌控,再到大厂级模块化系统、位运算刷题实战,一路冲到 FDE 时代核心力,每一篇都在拉高抽象层次,每一篇都在拓展 AI 开发的能力边界。 然后,我老老实实坐下来,写了一道数组去重题。

我才突然意识到,自己一路追着「高级玩法」跑,却差点忘了最底层的基本功。这道题看似简单,六种解法背后,藏着的是我之前所有学习的底层逻辑 —— 从暴力解法的基础,到数据结构的优化,再到 API 的优雅封装,和我一路学过来的路,一模一样。 往上走得再高,也要往下扎得深。

前端面试必问:数组去重,从原理到6种最优解(面试官最爱)

这篇文章我们来彻底搞定前端面试超高频考点:数组去重。 不管是大厂面试、中小厂笔试,还是日常业务开发,数组去重都是绕不开的基础题。 很多人以为一句[...new Set(arr)]就完事了,但面试官真正想考察的,远不止这些。


一、先搞懂:面试官到底在考什么?

数组去重这道题,表面考功能,实际考这些:

  • 常见业务逻辑是否熟练 - 会不会手写基础工具函数
  • 能不能给出多种解法
  • 是否熟悉数组 API -
  • 能不能说出每种方法优缺点-
  • 是否理解底层数据结构-
  • 代码是否健壮、可读、可维护

能写出去重 = 60分

能讲清原理 = 90分

能对比优劣 + 选择合适方案 = 100分

二、从 0 到 1:先搭好函数的架子
2.1 写注释 —— 不仅仅是给程序员看的

很多同学一上来就写逻辑,忽略了注释。但在面试中,注释体现了你的协作意识和可维护性思维

/** * @func unique 数组去重 * @param{Array}arr - 输入数组 * @returns{Array}- 去重后的数组 * @author xz * @date2026-05-27 */functionunique(arr){// 实现...}
2.2 参数校验 —— 永远不要相信用户的输入

面试官会故意传nullundefined、字符串甚至对象进来,看你有没有防御意识,函数健壮性非常重要,面试官特别看重这一点。

functionunique(arr){// 参数校验 不是数组,返回空数组 if(!Array.isArray(arr)){console.log('type error')return[];}// 正式去重逻辑...

7种实战解法,从基础到高效

第一层:双重循环——暴力美学的价值

for(let i=0;i<arr.length;i++){2for(let j=i +1;j<arr.length;j++){3if(arr[i]===arr[j]){4arr.splice(j,1)5j--6}7}

优点:好理解 缺点:O (n²) 效率低

解法 2:indexOf 去重

functionunique(arr){if(!Array.isArray(arr))return[];letres=[];for(let i=0;i<arr.length;i++){if(res.indexOf(arr[i])===-1){res.push(arr[i]);}}returnres;}

开始用 API 了:

解法 3:排序后相邻去重

js

functionunique(arr){if(!Array.isArray(arr))return[];letres=[];letsortArr=[...arr].sort();for(let i=0;i<sortArr.length;i++){if(sortArr[i]!==sortArr[i -1]){res.push(sortArr[i]);}}returnres;}

优点:快 O (n log n)缺点:破坏原数组顺序


解法 4:对象哈希表去重(空间换时间)

js

functionunique(arr){if(!Array.isArray(arr))return[];letobj={};letres=[];for(let item of arr){letkey=typeof item + item;if(!obj[key]){obj[key]=true;res.push(item);}}returnres;}

优点:O (n) 效率极高数据结构思想:空间换时间


解法5:Map—— 完美哈希表
functionuniqueByMap(arr){if(!Array.isArray(arr))return[];const map=new Map();const res=[];for(let item of arr){if(!map.has(item)){map.set(item,true);res.push(item);}}returnres;}
  • 保留顺序,O(n) 时间,O(n) 空间

  • 这是面试官非常认可的生产环境实现

解法 6:Set 去重(最优雅)
const unique=arr=>[...new Set(arr)];

优点:代码最少、效率高、稳定缺点:需要 ES6 支持(现代项目无压力) 表格

方法复杂度优点缺点
双循环O(n²)好理解效率低
filterO(n²)代码简洁效率低
排序相邻O(n log n)乱序
哈希O(n)极快占空间
SetO(n)极快、简洁、稳定推荐
1. 基础不牢,AI 也救不了你

AI 时代,很多人觉得:“我不用手写,AI 会写就行。” 但真相是: 你不懂基础,就无法判断 AI 写得对不对、优不优、稳不稳。 你没写过双循环,就不知道 O (n²) 有多慢 你没踩过哈希的坑,就不知道 1 和 ‘1’ 会冲突 你不懂参数校验,就不知道函数为什么会崩 你不懂复杂度,就不知道什么叫 “优化” AI 是执行者,你是决策者。 决策者的能力,来自底层基本功。

2. 向上抽象 & 向下扎根,是同一件事

我们学 Prompt、学 Agent、学模块化、学工程、学 FDE, 看起来是 “往上走”, 但最终会发现: 高级能力的底层,还是基础题里那套思维。 模块化:拆分职责、清晰语义 数据结构:选对工具、空间换时间 Prompt:精准描述意图 数组去重:从暴力到最优,也是精准描述意图 往上走得再高,也要往下扎得深。 没有底层,上层都是空中楼阁。

3. 好代码 = 更准确地描述 “我要什么”

六种解法一路看下来,你会发现: 代码越少,不一定越厉害; 但越贴近问题本质,一定越高级。

双重循环说:我要比较每一个 indexOf 说:我要查有没有 哈希表说:我要标记存在过 Set 说:我要一个不重复的集合

编程的终极,不是写指令,是描述意图。

4. 面试真正要的人:能讲清 “为什么”

会写 Set 只是及格。 能讲出六种方法、复杂度、优缺点、适用场景, 才是面试官想要的:

基础扎实、思路清晰、懂工程、懂取舍、可成长。

一题见功底,一题见思维。

用我朋友的话说:“Be AI Native 的路上,没有"高级"和"基础"的区别。你在一道小题里看到的思维深度,就是你在大项目里能走到的认知高度

点点关注呀! 下篇见!

http://www.jsqmd.com/news/908075/

相关文章:

  • MinIO分享链接太长太丑?教你一键生成带域名的短链接(CentOS 7实战)
  • 老式车载收音机改造:利用磁带通道加装外部音频输入接口
  • 告别手动计算!UE4地形导入时,那个让人头疼的Z轴缩放到底怎么算?(附自动计算工具)
  • 告别阴天废片!用Python+OpenCV实现经典颜色迁移算法,一键拯救你的旅行照片
  • AI搜索优化值不值?价格与效果真实解析
  • 【DeepSeek企业版核心功能解密】:20年AI架构师亲测的5大生产级能力与避坑指南
  • 纯电动车仿真结果不准?可能是你的AVL Cruise电池和电机模块没设对!深度解析关键参数设置逻辑
  • 程序代码篇---多语言混合编程
  • LPC9xx微控制器启动文件解析与工程实践
  • 基于树莓派与E-ink屏幕打造低功耗智能信息显示终端
  • 从Kaggle肺炎X光分类项目实战出发:5步搞定PyTorch Grad-CAM,让你的模型‘说话’
  • 别再只用t-SNE了!用UMAP在Python里给MNIST数据降维,3D可视化效果惊艳
  • Speculative RAG:基于“草稿”与并行检索的生成加速实践
  • AI如何提升内容创作效率与质量:五大核心助力点详解
  • 告别卡顿!SuperMap iDesktop 11i 倾斜摄影优化实战:从OSGB到S3M3.0的完整避坑指南
  • 2026 净化板、玻镁净化板、岩棉净化板、真金净化板、机制净化板、手工净化板厂家综合榜单:板材品质、生产工艺、防火环保多维度行业分析 - 海棠依旧大
  • Ubuntu无法识别串口ttyUSB0
  • PAT天梯赛L2-045‘堆宝塔’:一个被低估的栈应用经典练习题
  • 隐私增强技术能耗分析:从TLS到全同态加密
  • 差分隐私算法审计实战:DP-Auditorium原理与应用指南
  • ZYNQ PS端串口不够用?手把手教你用Vivado的AXI Uartlite IP核在PL端轻松拓展(附SDK与Procise联动避坑指南)
  • 别再让0.66*10=6.6000000000000005了!Java中BigDecimal处理金额的完整避坑指南
  • 告别网络焦虑!用OfflineExplorer Pro把整个技术文档站扒到本地,随时随地查资料
  • YOLOv7的Backbone设计哲学:从VoVNet、CSPNet到ELAN,看目标检测骨干网络是如何“卷”起来的
  • 用IoTBASIC打造复古可编程机器人小车:从硬件搭建到无线控制
  • 一文带你解锁最佳电子书阅读平台
  • 别再手动编号了!用Word尾注搞定毕业论文参考文献,自动更新真香
  • DataSophon部署避坑实录:从MySQL配置到Nginx代理,这些细节不注意就白装了
  • 航天器轨迹优化:SECO框架与PIPG算法解析
  • PVE虚拟化实战:如何为你的虚拟机配置最佳性能参数(CPU、内存、磁盘IO避坑指南)