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

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

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

技术qq交流群:`906392632`

目录

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

[1. push/pop ------ 数组的"后门"](#1. push/pop —— 数组的“后门”)

[2. shift/unshift ------ 专治"头铁"](#2. shift/unshift —— 专治“头铁”)

[3. slice ------ 安全切割(不伤原数组)](#3. slice —— 安全切割(不伤原数组))

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

[1. map ------ 一对一变形](#1. map —— 一对一变形)

[2. filter ------ 渣男筛选器](#2. filter —— 渣男筛选器)

[3. reduce ------ 终极缝合怪](#3. reduce —— 终极缝合怪)

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

[1. find/findIndex ------ 精准定位](#1. find/findIndex —— 精准定位)

[2. some/every ------ 群体审判](#2. some/every —— 群体审判)

[3. flatMap ------ 二维打击](#3. flatMap —— 二维打击)

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

[1. 用fill快速生成测试数据](#1. 用fill快速生成测试数据)

[2. sort的坑与妙用](#2. sort的坑与妙用)

[3. Array.from的隐藏玩法](#3. Array.from的隐藏玩法)

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


大家好,我是小杨,做了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%冗余代码!你还知道哪些神级用法?评论区掰头啊!

相关推荐
重整旗鼓~6 分钟前
7.索引库操作
java·开发语言
海的诗篇_23 分钟前
前端开发面试题总结-vue2框架篇(四)
前端·css·面试·vue·html
用户4266705916924 分钟前
为什么说不可信的Wi-Fi不要随便连接?
前端
Jay Kay25 分钟前
深入解析协程:高并发编程的轻量级解决方案
开发语言·c++·算法
玺同学1 小时前
从卡顿到流畅:前端渲染性能深度解析与实战指南
前端·javascript·性能优化
lifallen1 小时前
Java BitSet类解析:高效位向量实现
java·开发语言·后端·算法
我是谁谁1 小时前
一篇文章让你学透在Vue 3 中watch 和 watchEffect的区别
javascript
光影少年1 小时前
vuex中的辅助函数怎样使用
前端·javascript
学不好python的小猫1 小时前
7-4 身份证号处理
开发语言·python·算法
teeeeeeemo1 小时前
JS数据类型检测方法总结
开发语言·前端·javascript·笔记