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%冗余代码!你还知道哪些神级用法?评论区掰头啊!

相关推荐
万少3 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
哈里谢顿4 小时前
1000台裸金属并发创建中的重难点问题分析
面试
哈里谢顿4 小时前
20260303面试总结(全栈)
面试
橙序员小站6 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
炫饭第一名8 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫8 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊8 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter8 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折9 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_9 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js