JavaScript数组高级操作完全指南
一、数组基础回顾
数组是JavaScript中最常用的数据结构之一,用于存储有序的数据集合。现代JavaScript(ES6+)为数组操作提供了丰富的API:
// 数组创建方式
const arr1 = [1, 2, 3]; // 字面量
const arr2 = new Array(5).fill(0); // 构造器
const arr3 = Array.from({length: 3}, (v, i) => i); // ES6创建
二、核心操作方法解析
1. 数据转换三剑客
map/filter/reduce 是最常用的数组转换方法:
// 案例:商品数据处理
const products = [
{id: 1, name: '手机', price: 2999, stock: 10},
{id: 2, name: '笔记本', price: 5999, stock: 5}
];
// map转换
const names = products.map(p => p.name);
// filter过滤
const expensive = products.filter(p => p.price > 3000);
// reduce聚合
const totalValue = products.reduce((sum, p) => sum + p.price * p.stock, 0);
2. ES6+新增实用方法
- find/findIndex – 查找元素
- some/every – 条件检测
- flat/flatMap – 扁平化处理
// 查找库存为0的商品
const outOfStock = products.find(p => p.stock === 0);
// 检查所有商品是否都有库存
const allInStock = products.every(p => p.stock > 0);
// 扁平化嵌套数组
const nested = [1, [2, 3], [4, [5]]];
const flattened = nested.flat(2); // [1, 2, 3, 4, 5]
三、性能优化实践
处理大型数组时需要注意性能问题:
1. 循环方式选择
// 测试10万次操作耗时
const bigArray = new Array(100000).fill(0);
console.time('for');
for(let i = 0; i {}); // 次之
console.timeEnd('forEach');
2. 避免中间数组
链式操作会产生中间数组,大数据量时应合并操作:
// 不推荐写法(产生2个中间数组)
const result = bigArray
.map(x => x * 2)
.filter(x => x > 10);
// 推荐写法(仅1次遍历)
const result = bigArray.reduce((arr, x) => {
const doubled = x * 2;
if(doubled > 10) arr.push(doubled);
return arr;
}, []);
四、实战案例:表格数据处理
综合应用数组方法处理表格数据:
// 原始数据
const employees = [
{id: 1, name: '张三', dept: '研发部', salary: 15000},
{id: 2, name: '李四', dept: '市场部', salary: 12000},
// ...更多数据
];
// 1. 按部门分组
const byDept = employees.reduce((groups, emp) => {
(groups[emp.dept] || (groups[emp.dept] = [])).push(emp);
return groups;
}, {});
// 2. 计算各部门平均薪资
const avgSalary = Object.entries(byDept).map(([dept, emps]) => {
const avg = emps.reduce((sum, e) => sum + e.salary, 0) / emps.length;
return {dept, avg: Math.round(avg)};
});
// 3. 生成薪资报告
const report = avgSalary
.sort((a, b) => b.avg - a.avg)
.map(item => `${item.dept}: ¥${item.avg}`)
.join('n');
五、总结与最佳实践
- 根据场景选择合适的方法:查询用find,转换用map,过滤用filter
- 大数据集优先使用for循环,小数据集可使用高阶函数
- ES6+方法让代码更简洁,但要注意浏览器兼容性
- 复杂操作可组合多个方法,但要注意可读性
掌握这些数组技巧,能显著提升前端开发效率!