JavaScript篇:【前端必备】数组方法大全:从‘会写’到‘玩出花’,你掌握几个?

大家好,我是江城开朗的豌豆,一名拥有6年以上前端开发经验的工程师。我精通HTML、CSS、JavaScript等基础前端技术,并深入掌握Vue、React、Uniapp、Flutter等主流框架,能够高效解决各类前端开发问题。在我的技术栈中,除了常见的前端开发技术,我还擅长3D开发,熟练使用Three.js进行3D图形绘制,并在虚拟现实与数字孪生技术上积累了丰富的经验,特别是在虚幻引擎开发方面,有着深入的理解和实践。

我一直认为技术的不断探索和实践是进步的源泉,近年来,我深入研究大数据算法的应用与发展,尤其在数据可视化和交互体验方面,取得了显著的成果。我也注重与团队的合作,能够有效地推动项目的进展和优化开发流程。现在,我担任全栈工程师,拥有CSDN博客专家认证及阿里云专家博主称号,希望通过分享我的技术心得与经验,帮助更多人提升自己的技术水平,成为更优秀的开发者。

技术qq交流群:906392632

大家好,我是小杨,做了6年前端,今天想和大家聊聊JavaScript数组的那些方法。刚入行时,我只会用pushpop,后来被同事的代码秀了一脸------原来数组还能这么玩!今天就把这些年的经验总结成 "四阶用法" ,从基础到骚操作,包你看完直呼:"原来还能这样?!"


一、青铜段位:每天必用的"五虎将"

1. push/pop ------ 数组的"后门"

javascript 复制代码
const todoList = ['写博客', '改bug'];
todoList.push('摸鱼'); // ['写博客', '改bug', '摸鱼']
todoList.pop(); // 移除'摸鱼'

我的踩坑 :曾用push批量添加元素,结果参数没展开,整个数组成了嵌套结构:

javascript 复制代码
todoList.push(['开会', '加班']); // 错误示范!
// 正确姿势:todoList.push(...['开会', '加班']);

2. shift/unshift ------ 专治"头铁"

javascript 复制代码
const queue = ['用户A', '用户B'];
queue.unshift('VIP用户'); // 插队到头部
queue.shift(); // 移除'VIP用户'

3. slice ------ 安全切割(不伤原数组)

javascript 复制代码
const fruits = ['🍎', '🍌', '🍊'];
const myFruits = fruits.slice(1, 3); // ['🍌', '🍊'] 
// 原数组完好无损

二、白银段位:数据处理三剑客

1. map ------ 一对一变形

把用户ID数组转成用户对象:

javascript 复制代码
const userIds = [101, 102, 103];
const users = userIds.map(id => ({ id, name: `用户${id}` }));
// [{id:101,name:'用户101'}, ...]

2. filter ------ 渣男筛选器

剔除未完成的任务:

javascript 复制代码
const tasks = [
  { id: 1, done: true },
  { id: 2, done: false }
];
const doneTasks = tasks.filter(task => task.done);

3. reduce ------ 终极缝合怪

计算购物车总价(新手劝退警告⚠️):

javascript 复制代码
const cart = [
  { name: '键盘', price: 299 },
  { name: '鼠标', price: 199 }
];
const total = cart.reduce((sum, item) => sum + item.price, 0);
// 498

我的黑历史 :第一次用忘了加初始值0,遇到空数组直接报错!


三、黄金段位:高手专属骚操作

1. find/findIndex ------ 精准定位

找第一个吃螃蟹的人:

javascript 复制代码
const members = [
  { id: 1, role: 'admin' },
  { id: 2, role: 'user' }
];
const admin = members.find(m => m.role === 'admin');

2. some/every ------ 群体审判

检查是否有未成年:

javascript 复制代码
const ages = [18, 20, 17];
const hasChild = ages.some(age => age < 18); // true

3. flatMap ------ 二维打击

合并订单中的多件商品:

javascript 复制代码
const orders = [
  { items: ['🍔', '🍟'] },
  { items: ['🥤'] }
];
const allItems = orders.flatMap(order => order.items);
// ['🍔', '🍟', '🥤']

四、王者段位:冷门但炸裂的技巧

1. 用fill快速生成测试数据

javascript 复制代码
// 生成10个重复用户
const fakeUsers = Array(10).fill({ name: '测试用户' });

2. sort的坑与妙用

默认按字符串Unicode排序

javascript 复制代码
[10, 2, 1].sort(); // [1, 10, 2] 😱
// 正确姿势:
[10, 2, 1].sort((a, b) => a - b); // [1, 2, 10]

3. Array.from的隐藏玩法

生成1-100的数组:

javascript 复制代码
const nums = Array.from({ length: 100 }, (_, i) => i + 1);

五、总结:我的数组方法选择指南

场景 推荐方法
增删元素 push/pop/shift/unshift
数据转换 map/filter/reduce
查找元素 find/findIndex/includes
批量操作 forEach/some/every
复杂结构处理 flat/flatMap/Array.from

最后说句掏心话 :6年前我背API时总觉得"会用就行",直到看见同事用reduce一行代码搞定我20行的逻辑... 数组方法玩得6,真的能少写50%冗余代码!你还知道哪些神级用法?评论区掰头啊!

相关推荐
user20585561518139 小时前
X6 中边悬浮置顶,规避 `mouseleave` 事件丢失问题
前端
李明卫杭州9 小时前
CSS aspect-ratio 属性完全指南
前端
Pedantic11 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘11 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆11 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师12 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆12 小时前
VSCode自动格式化三要素
前端
爱勇宝13 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen14 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程