JavaScript Array高阶用法实战:从数据操作到性能优化
数组(Array)是JavaScript中最基础也是最强大的数据结构之一。本文将深入探讨Array的高阶用法,包括数据转换、性能优化和实用技巧,并通过实际案例展示如何提升开发效率。
一、函数式编程三剑客:map/filter/reduce
案例1:电商商品数据处理
const products = [
{ id: 1, name: 'iPhone 13', price: 6999, stock: 10 },
{ id: 2, name: 'MacBook Pro', price: 12999, stock: 5 },
{ id: 3, name: 'AirPods Pro', price: 1499, stock: 20 }
];
// 1. 获取所有商品名称
const names = products.map(item => item.name);
// 2. 筛选库存大于10的商品
const highStock = products.filter(item => item.stock > 10);
// 3. 计算总库存价值
const totalValue = products.reduce((sum, item) => sum + item.price * item.stock, 0);
console.log(names); // ["iPhone 13", "MacBook Pro", "AirPods Pro"]
console.log(highStock); // [{...AirPods Pro}]
console.log(totalValue); // 6999*10 + 12999*5 + 1499*20 = 144875
二、性能优化技巧
在处理大数据量时,Array方法的性能差异显著:
- for vs forEach: 传统for循环通常比forEach快2-3倍
- 提前终止循环: 使用some/every替代forEach可实现提前终止
- 避免链式调用: 多次遍历不如单次遍历处理
案例2:大数据量搜索优化
// 10万条数据
const bigData = Array(100000).fill().map((_, i) => ({ id: i, value: Math.random() }));
// 低效做法
const result1 = bigData
.filter(item => item.value > 0.5)
.map(item => item.id);
// 高效做法
const result2 = [];
for (let i = 0; i 0.5) {
result2.push(bigData[i].id);
}
}
三、ES6+新特性实战
案例3:数组去重与展开
// 数组去重
const dupArr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [...new Set(dupArr)]; // [1, 2, 3, 4, 5]
// 数组合并
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const merged = [...arr1, ...arr2]; // [1, 2, 3, 4, 5, 6]
// 数组解构
const [first, second, ...rest] = merged;
console.log(first); // 1
console.log(rest); // [3, 4, 5, 6]
四、TypedArray处理二进制数据
当需要处理二进制数据时,TypedArray提供了更高效的解决方案:
// 创建一个16字节的缓冲区
const buffer = new ArrayBuffer(16);
// 创建32位整数视图
const int32View = new Int32Array(buffer);
// 写入数据
for (let i = 0; i < int32View.length; i++) {
int32View[i] = i * 2;
}
console.log(int32View); // [0, 2, 4, 6]
五、实用工具函数集锦
案例4:常用数组工具函数
// 数组分块
function chunkArray(arr, size) {
return Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>
arr.slice(i * size, i * size + size)
);
}
// 数组随机排序
function shuffleArray(arr) {
return arr.sort(() => Math.random() - 0.5);
}
// 数组交集
function arrayIntersection(arr1, arr2) {
return arr1.filter(item => arr2.includes(item));
}
// 使用示例
console.log(chunkArray([1, 2, 3, 4, 5], 2)); // [[1,2], [3,4], [5]]
console.log(shuffleArray([1, 2, 3, 4, 5])); // 随机顺序
console.log(arrayIntersection([1, 2, 3], [2, 3, 4])); // [2, 3]
通过掌握这些Array的高阶用法,开发者可以编写出更简洁、高效且易维护的代码。在实际项目中,应根据具体场景选择合适的方法,平衡代码可读性和性能需求。