GitHub更新 https://github.com/liangfengbo/javascript-data-structures-and-algorithmsjavascript
class myArray { }
/** * 初始化構造函數 * @param capacity 容量 */ constructor(capacity) { // 初始化arr變量 this.arr = capacity === undefined ? [] : new Array(capacity); // 數組長度 this.length = 0; // 數組容量 this.capacity = capacity; }
// 獲取數組的長度 getLength() { return this.length; } // 獲取數組的容量 getCapacity() { return this.arr.length; } // 判斷數組是否爲空 isEmpty() { return this.length === 0; }
/** * 在數組中在index插入一個新的元素e * @param index 索引 * @param e 元素 * 原理: * 首先在傳進來index索引的位置向後面移動一位, * 而後把該index索引騰空出來放進傳入的新的元素e, * 最後維護一下length,長度加1 */ add(index, e) { if (this.length === this.arr.length) { throw new Error('Add failed. Array is full.') } if (index < 0 || index > this.length) { throw new Error('Add failed. Request index >= 0 and index <= length'); } for (let i = this.length - 1; i >= index; i--) { this.arr[i + 1] = this.arr[i]; } this.arr[index] = e; this.length++; } // 向數組首位添加一個新元素e addFirst(e) { this.add(0, e) } // 向數組全部的元素後面添加一個新元素e addLast(e) { this.add(this.length, e); }
/** * 從數組中刪除index位置的元素,返回刪除的元素 * @param index * @returns {*} * 原理: * 首先找到索引index的位置, * 而後把索引後面的元素都向前移動一位,實際上是把索引後面的翻蓋前面一位的元素 * 最後維護一下length,減一 * */ remove(index) { if (index < 0 || index >= this.length) { throw new Error('Remove failed. Request index >= 0 and index <= length'); } let ret = this.arr[index]; for (let i = index + 1; i < this.length; i++) { this.arr[i - 1] = this.arr[i]; } this.length--; return ret; } // 從數組中刪除第一個元素,返回刪除的元素 removeFirst() { return this.remove(0) } // 從數組中刪除最好個元素,返回刪除的元素 removeLast() { return this.remove(this.length - 1) } // 從數組中刪除元素e removeElement(e) { let index = this.findIndex(e); if (index != -1) { this.remove(index); } }
// 獲取index索引位置的元素 get(index) { if (index < 0 || index >= this.length) { throw new Error('Get failed. Index is illegal.'); } return this.arr[index]; } // 修改index索引的元素e set(index, e) { if (index < 0 || index >= this.length) { throw new Error('Get failed. Index is illegal.'); } this.arr[index] = e; }
// 查詢數組是否包含e元素 contains(e) { for (let i = 0; i < this.length; i++) { if (this.arr[i] === e) { return true; } } return false; } // 查找數組中元素所在的所在的索引,若是不存在e,則返回-1 findIndex(e) { for (let i = 0; i < this.length; i++) { if (this.arr[i] === e) { return i; } } return -1; } // 把數組轉換爲字符串,並返回結果 toString() { let res = ""; console.log(`Array: length = ${this.length}, capacity = ${this.capacity}.`); res += "["; for (let i = 0; i < this.length; i++) { res += this.arr[i]; if (i !== this.length - 1) { res += ', ' } } res += "]"; return res.toString(); }
// 使用咱們的類數組,聲明一個容量爲20的數組 let arr = new myArray(20); // 首位增長數據 arr.addFirst('波波'); console.log(arr.toString()); // 輸出:Array: length = 1, capacity = 20. // 輸出:[波波] for (let i = 0; i < 10; i++) { arr.addLast(i) } console.log(arr.toString()); // 輸出:Array: length = 11, capacity = 20. // 輸出:[波波, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(arr.findIndex(4)); // 5 // ...
方法 | 描述 | 參數 | 參數說明 | 示例 |
---|---|---|---|---|
getLength | 返回數組的長度 | getLength() | ||
getCapacity | 返回數組的容量 | getCapacity() | ||
isEmpty | 判斷數組是否爲空,返回布爾值 | isEmpty() | ||
addFirst | 向數組首位添加一個新元素 | e | 新元素 | addFirst(e) |
addLast | 向數組全部的元素後面添加一個新元素 | e | 新元素 | addLast(e) |
add | 在數組中在index插入一個新的元素e | index, e | index索引,e 新元素 | add(index, e) |
remove | 從數組中刪除index位置的元素,返回刪除的元素 | index | 索引 | remove(index) |
removeFirst | 從數組中刪除第一個元素,返回刪除的元素 | removeFirst() | ||
removeLast | 從數組中刪除最後的元素,返回刪除的元素 | removeLast() | ||
removeElement | 從數組中刪除元素e | e | 刪除的元素e | removeElement(e) |
get | 獲取index索引位置的元素 | index | 索引 | get(index) |
set | 修改index索引的元素e | index, e | index 索引,e新替換的元素 | set(index, e) |
contains | 查詢數組是否包含e元素 | e | 查詢包含的元素 | contains(e) |
findIndex | 查找數組中e元素所在的所在的索引,若是不存在e,則返回-1 | e | 查詢的元素 | findIndex(e) |
toString | 返回數組格式化數據 | toString() |
class myArray { /** * 初始化構造函數 * @param capacity 容量 */ constructor(capacity) { // 初始化arr變量 this.arr = capacity === undefined ? [] : new Array(capacity); // 數組長度 this.length = 0; // 數組容量 this.capacity = capacity; } // 獲取數組的長度 getLength() { return this.length; } // 獲取數組的容量 getCapacity() { return this.arr.length; } // 判斷數組是否爲空 isEmpty() { return this.length === 0; } addFirst(e) { this.add(0, e) } // 向全部的元素後面添加一個新元素 addLast(e) { this.add(this.length, e); } /** * 在數組中在index插入一個新的元素e * @param index 索引 * @param e 元素 * 原理:首先在傳進來index索引的位置向後面移動一位, * 而後把該index索引騰空出來放進傳入的新的元素e, * 最後維護一下length,長度加1 */ add(index, e) { if (this.length === this.arr.length) { throw new Error('Add failed. Array is full.') } if (index < 0 || index > this.length) { throw new Error('Add failed. Request index >= 0 and index <= length'); } for (let i = this.length - 1; i >= index; i--) { this.arr[i + 1] = this.arr[i]; } this.arr[index] = e; this.length++; } /** * 從數組中刪除index位置的元素,返回刪除的元素 * @param index * @returns {*} * 原理: * 首先找到索引index的位置, * 而後把索引後面的元素都向前移動一位,實際上是把索引後面的翻蓋前面一位的元素 * 最後維護一下length,減一 * */ remove(index) { if (index < 0 || index >= this.length) { throw new Error('Remove failed. Request index >= 0 and index <= length'); } let ret = this.arr[index]; for (let i = index + 1; i < this.length; i++) { this.arr[i - 1] = this.arr[i]; } this.length--; return ret; } // 從數組中刪除第一個元素,返回刪除的元素 removeFirst() { return this.remove(0) } // 從數組中刪除最好個元素,返回刪除的元素 removeLast() { return this.remove(this.length - 1) } // 從數組中刪除元素e removeElement(e) { let index = this.findIndex(e); if (index != -1) { this.remove(index); } } // 獲取index索引位置的元素 get(index) { if (index < 0 || index >= this.length) { throw new Error('Get failed. Index is illegal.'); } return this.arr[index]; } // 修改index索引的元素e set(index, e) { if (index < 0 || index >= this.length) { throw new Error('Get failed. Index is illegal.'); } this.arr[index] = e; } // 查詢數組是否包含e元素 contains(e) { for (let i = 0; i < this.length; i++) { if (this.arr[i] === e) { return true; } } return false; } // 查找數組中元素所在的所在的索引,若是不存在e,則返回-1 findIndex(e) { for (let i = 0; i < this.length; i++) { if (this.arr[i] === e) { return i; } } return -1; } // 把數組轉換爲字符串,並返回結果 toString() { let res = ""; console.log(`Array: length = ${this.length}, capacity = ${this.capacity}.`); res += "["; for (let i = 0; i < this.length; i++) { res += this.arr[i]; if (i !== this.length - 1) { res += ', ' } } res += "]"; return res.toString(); } } // 測試 // 使用咱們的類數組,聲明一個容量爲20的數組 let arr = new myArray(20); // 首位增長數據 arr.addFirst('波波'); console.log(arr.toString()); // 輸出:Array: length = 1, capacity = 20. // 輸出:[波波] for (let i = 0; i < 10; i++) { arr.addLast(i) } console.log(arr.toString()); // 輸出:Array: length = 11, capacity = 20. // 輸出:[波波, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(arr.findIndex(4)); // 5 // ...上面的方法均可以測試使用。