JavaScript数组操作全指南:从基础到高阶应用

JavaScript数组操作全指南:从基础到高阶应用
1. 数组基础概念与特性数组是编程中最基础且重要的数据结构之一它允许我们在单个变量名下存储多个值。与普通变量不同数组通过索引(index)来访问各个元素这使得数据管理更加高效和系统化。在JavaScript中数组具有以下核心特征动态大小数组长度可以随时增减混合类型同一个数组可以包含不同类型的数据零基索引第一个元素的索引是0浅拷贝复制操作创建的是引用而非独立副本2. 数组的创建与初始化2.1 基本创建方式// 字面量方式 const fruits [Apple, Banana]; // 构造函数方式 const numbers new Array(1, 2, 3); // 从字符串转换 const chars Array.from(Hello);2.2 特殊初始化技巧// 创建指定长度的空数组 const emptyArray new Array(5); // [empty × 5] // 填充默认值 const filledArray Array(5).fill(0); // [0, 0, 0, 0, 0] // 生成数字序列 const sequence [...Array(5).keys()]; // [0, 1, 2, 3, 4]3. 数组元素的访问与操作3.1 基本访问方式const colors [red, green, blue]; // 通过索引访问 console.log(colors[1]); // green // 访问不存在的索引 console.log(colors[5]); // undefined // 负索引访问(使用at方法) console.log(colors.at(-1)); // blue3.2 元素修改与添加// 修改元素 colors[0] yellow; // 添加新元素 colors[3] black; // 使用push方法在末尾添加 colors.push(white); // 使用unshift方法在开头添加 colors.unshift(purple);4. 数组常用操作方法4.1 添加/删除元素const arr [1, 2, 3]; // 删除末尾元素 arr.pop(); // [1, 2] // 删除开头元素 arr.shift(); // [2] // 在任意位置添加/删除 arr.splice(1, 0, a, b); // [2, a, b]4.2 数组转换与拼接// 数组合并 const newArr arr.concat([4, 5]); // 数组转字符串 const str arr.join(-); // 2-a-b // 字符串分割为数组 const words hello world.split( );5. 数组遍历与高阶函数5.1 基本遍历方法// for循环 for(let i0; iarr.length; i) { console.log(arr[i]); } // for...of循环 for(const item of arr) { console.log(item); }5.2 高阶函数应用// map - 转换数组 const doubled arr.map(x x * 2); // filter - 筛选元素 const evens arr.filter(x x % 2 0); // reduce - 累积计算 const sum arr.reduce((acc, cur) acc cur, 0); // forEach - 遍历执行 arr.forEach(item console.log(item));6. 多维数组处理6.1 二维数组创建与访问// 创建二维数组 const matrix [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; // 访问元素 console.log(matrix[1][2]); // 66.2 多维数组操作// 扁平化数组 const flatArray matrix.flat(); // 深度扁平化 const deepArray [1, [2, [3]]].flat(2); // 矩阵转置 const transposed matrix[0].map((_, i) matrix.map(row row[i]));7. 数组性能优化技巧7.1 避免常见性能陷阱// 避免在循环中修改数组长度 for(let i0; iarr.length; i) { // 错误的做法可能造成无限循环 // arr.push(i); } // 使用临时变量缓存长度 const len arr.length; for(let i0; ilen; i) { // 安全操作 }7.2 高效操作方法选择// 大量数据时使用typed array const buffer new ArrayBuffer(16); const int32View new Int32Array(buffer); // 使用Set进行快速去重 const uniqueArray [...new Set(arr)];8. 数组在实际开发中的应用8.1 数据处理示例// 分组函数 function groupBy(array, key) { return array.reduce((acc, obj) { const group obj[key]; acc[group] acc[group] || []; acc[group].push(obj); return acc; }, {}); } // 使用示例 const people [ {name: Alice, age: 21}, {name: Bob, age: 20}, {name: Charlie, age: 21} ]; console.log(groupBy(people, age));8.2 算法实现// 快速排序实现 function quickSort(arr) { if(arr.length 1) return arr; const pivot arr[0]; const left []; const right []; for(let i1; iarr.length; i) { arr[i] pivot ? left.push(arr[i]) : right.push(arr[i]); } return [...quickSort(left), pivot, ...quickSort(right)]; }9. 数组操作注意事项稀疏数组直接设置length或跳索引创建会导致空洞遍历时需注意引用类型数组元素为对象时修改会影响所有引用类型转换比较数组时注意类型转换规则大数组处理超过10万条数据应考虑分批处理10. 现代JavaScript数组特性10.1 ES6新增方法// 查找元素 const found arr.find(x x 3); // 检查包含 const hasValue arr.includes(2); // 数组解构 const [first, ...rest] arr;10.2 不可变操作// 创建反转副本而不修改原数组 const reversed arr.toReversed(); // 创建排序副本 const sorted arr.toSorted(); // 安全插入/删除 const newArr arr.toSpliced(1, 2, new);数组作为JavaScript中最常用的数据结构掌握其各种操作方法对于提高开发效率至关重要。在实际项目中根据具体需求选择合适的方法组合可以写出更简洁高效的代码。特别要注意数组操作对原数组的影响在需要保持原数组不变的场景下优先选择返回新数组的方法。