大家好,我是江城开朗的豌豆,一名拥有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数组的那些方法。刚入行时,我只会用push
和pop
,后来被同事的代码秀了一脸------原来数组还能这么玩!今天就把这些年的经验总结成**"四阶用法"**,从基础到骚操作,包你看完直呼:"原来还能这样?!"
一、青铜段位:每天必用的"五虎将"
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%冗余代码!你还知道哪些神级用法?评论区掰头啊!