您好,登录后才能下订单哦!
# JavaScript怎么创建数组
数组是JavaScript中最基础且强大的数据结构之一,用于存储有序的元素集合。本文将详细介绍7种创建数组的方法,并分析它们的适用场景和注意事项。
## 1. 数组字面量(最常用)
```javascript
// 空数组
const arr1 = [];
// 带初始值的数组
const arr2 = [1, 'text', true, {name: 'John'}];
// 多维数组
const matrix = [
[1, 2, 3],
[4, 5, 6]
];
特点:
- 简洁直观,90%场景的首选
- 可包含任意数据类型
- 推荐使用const
声明避免意外修改
// 创建空数组(等效于[])
const arr1 = new Array();
// 创建指定长度的空数组
const arr2 = new Array(5); // [empty × 5]
// 创建带元素的数组
const arr3 = new Array(1, 2, 3); // [1, 2, 3]
注意事项:
- 单数字参数会创建空槽数组而非[5]
- 可读性较差,现代代码中较少使用
- 可能被误用导致意外行为
const arr1 = Array.of(5); // [5]
const arr2 = Array.of(1,2,3); // [1,2,3]
优势: - 解决构造函数的单参数陷阱 - 语义更明确 - 适合需要明确区分长度和元素的场景
// 从类数组对象转换
const strArr = Array.from('hello'); // ['h','e','l','l','o']
// 从Set转换
const set = new Set([1,2,3]);
const setArr = Array.from(set); // [1,2,3]
// 带映射函数
const doubled = Array.from([1,2,3], x => x*2); // [2,4,6]
典型应用场景:
- DOM节点集合转换:Array.from(document.querySelectorAll('div'))
- 函数arguments对象转换
- 任何实现了iterable
协议的对象
// 合并数组
const arr1 = [1, 2];
const arr2 = [...arr1, 3, 4]; // [1,2,3,4]
// 转换可迭代对象
const strArr = [...'hello']; // ['h','e','l','l','o']
// 复制数组(浅拷贝)
const original = [1,2,3];
const copy = [...original];
优势: - 语法简洁 - 支持任何可迭代对象 - 适合数组浅拷贝和合并操作
// 创建并填充5个0的数组
const zeros = new Array(5).fill(0); // [0,0,0,0,0]
// 填充对象需要注意引用问题
const objArr = new Array(3).fill({}); // 三个元素指向同一对象
注意事项:
- 对于引用类型会填充相同引用
- 适合初始化基本类型数组
- 常与Array(n)
结合使用
const indexArr = [...Array(5).keys()]; // [0,1,2,3,4]
const seq = Array.from({length: 5}, (_,i) => i+1); // [1,2,3,4,5]
function range(start, end) {
return Array.from({length: end-start+1}, (_,i) => start+i);
}
range(3,7); // [3,4,5,6,7]
方法 | 创建耗时(100万次) |
---|---|
字面量 [] |
15ms |
Array(n) |
20ms |
Array.of() |
25ms |
Array.from() |
120ms |
[]
在大多数情况下都是最佳选择new Array(n).fill(value)
Array.from()
或扩展运算符Array.of()
替代new Array()
Q:new Array(5)
和[undefined,undefined,undefined]
的区别?
A:前者创建的是空槽数组(sparse array),后者是实际包含undefined值的数组。map()
等方法会跳过空槽。
Q:如何检测数组?
A:使用Array.isArray(arr)
,比instanceof
更可靠。
Q:如何创建不重复的随机数数组?
const uniqueRandom = Array.from({length: 10}, () =>
Math.floor(Math.random()*100)).filter((v,i,a) => a.indexOf(v) === i);
掌握这些数组创建方法,将帮助你更高效地处理JavaScript中的集合数据。根据具体场景选择合适的方法,可以使代码更简洁且性能更优。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。