HLJ 发布于
2025-05-22 15:56:49
2阅读

JavaScript数组基础与高级用法总结

JavaScript中的数组是一个非常重要且灵活的数据结构,用于存储有序的元素集合。以下是关于JavaScript数组的详细总结:

1. 创建数组

  • 字面量法let arr = [1, 'a', {x: 2}];
  • 构造函数let arr = new Array(1, 2, 3);(注意单个数字参数会创建空槽数组)。
  • ES6方法
    • Array.from():将类数组对象(如arguments、NodeList)或可迭代对象(如Set)转换为数组。
    • Array.of():解决构造函数歧义,如Array.of(7) 创建 [7]

2. 基本特性

  • 动态长度:通过arr.length获取或修改长度(扩展或截断数组)。
  • 多类型元素:可包含任意类型(数字、字符串、对象、其他数组等)。
  • 稀疏数组:允许存在空槽(empty slots),如[1, , 3],某些方法会跳过空槽。

3. 常用方法

  • 修改原数组
    • 增删元素:push(), pop(), unshift(), shift(), splice()
    • 排序与反转:sort(), reverse()
    • 填充与复制:fill(), copyWithin()
  • 返回新数组
    • 合并与切片:concat(), slice()
    • 转换与拼接:join(), flat(), flatMap()
    • 过滤与映射:filter(), map()
  • 迭代方法
    • 遍历:forEach()(无法中断)。
    • 检测:every(), some(), includes()
    • 搜索:find(), findIndex(), indexOf()
    • 归约:reduce(), reduceRight()

4. ES6+ 特性

  • 展开运算符[...arr]用于合并数组或传递参数(如Math.max(...arr))。
  • 迭代器接口:可通过for...of遍历,或直接使用keys(), values(), entries()方法。
  • 扁平化flat(depth)flatMap()处理嵌套数组。

5. 性能注意

  • 高效操作push/pop在数组末尾操作,时间复杂度O(1)。
  • 低效操作shift/unshift在开头操作需移动元素,时间复杂度O(n)。

6. 类型检测与转换

  • 类型判断Array.isArray(arr)(因typeof arr返回"object")。
  • 类数组转换Array.from(arrayLike)[...arrayLike]

7. 拷贝与深浅复制

  • 浅拷贝slice(), concat(), 展开运算符。
  • 深拷贝JSON.parse(JSON.stringify(arr))(局限:不支持函数、循环引用)。

8. 特殊场景

  • 稀疏数组处理map()跳过空槽,而join()视作空字符串(如[1,,3].join() → "1,,3")。
  • 链式调用:方法可链式组合(如arr.filter().map().reduce())。

9. 实用技巧

  • 快速清空数组arr.length = 0
  • 去重[...new Set(arr)]
  • 交换变量[a, b] = [b, a](解构赋值)。

10. 注意事项

  • 空槽与undefined:空槽(empty)在部分方法中被跳过,而显式赋值为undefined的元素会被处理。
  • 构造函数陷阱new Array(3)生成[empty × 3],而非[undefined, undefined, undefined]

掌握这些知识后,可以更高效地利用JavaScript数组处理数据,并根据需求选择合适的方法和优化策略。

当前文章内容为原创转载请注明出处:http://www.good1230.com/detail/2025-05-22/738.html
最后生成于 2025-06-05 15:07:01
此内容有帮助 ?
0