# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。