>[success] # js 數組
~~~
1.讀《學習JavaScript數據結構與算法》第三版
~~~
>[danger] ##### 在數組開頭插入元素 O(n)
~~~
1.js 在數組開頭插入元素方法是 -- 'unshift',通過結構數組我們可以知道向前插入的效率
最低,表示為'O(n)',遵循向前插入是最慢的
2.向前插入時候首先要騰出數組里的第一個元素的位置,把所有的元素位置都向右移動,
也就是原來的 a[0] 的值給到現在a[1]的值,但是如果我們寫的方法是正序,就會出現,取得值
都是重新改變的值,為了不影響原來的值變化,應該使用倒敘,也就是如果當前數組長度是100
,他的末尾角標為99,現在將數組首位添加一項,那么數組就應該從100 變成101 即末尾角標
為100,因此可以直接用現數組的長度作為倒敘也就是從100開始,那么現在a[100] 就應該是原來的
a[99]
將這個思路代碼化:'可以循環數組中的元素,以數組的長度未開始(因為前插加入后的末尾的角標整好是現'
'在數組的長度)開始,將對應的前一個元素(i-1)的值賦給它(i),依次處理,最后把我們想要的值賦給第一個位置(索引 0)'
~~~
* 將這一個過程圖像化(書中的圖片)

~~~
// 這里使用了倒序,如果正序就出現一個問題,[1,2,3,4]
// 改變了原先的數組順序導致從第一次往后都是錯誤取值
Array.prototype.insertFirstPosition = function (value) {
for(let i=this.length;i>0;i--){
this[i] = this[i-1]
}
this[0] = value
}
let list = [1,2,3,4,5]
list.insertFirstPosition(-1)
console.log(list)
~~~
>[danger] ##### 刪除數組開頭元素 O(n)
~~~
1.js 刪除數組第一項使用的是 -- 'shift'
2.通過下面代碼發現移出第一項,數組因為長度沒變的原因,最后一項變成了undefined
~~~
* 將這一個過程圖像化(書中的圖片)

~~~
1.同理刪除不能用倒敘,因為會改變前一個值,用正序后發現首位變成了undefined沒有刪除,做一個方法
專門用來刪除所有的undefined
~~~
~~~
let numbers = [1,2,3,4,5]
for(let i=0,len = numbers.length;i<len;i++){
numbers[i] = numbers[i+1]
}
~~~
* 改進后的寫法增加了一個去除undefined值的方法
~~~
// 過濾數組中undefined值數據
Array.prototype.reIndex = function(myArray) {
const newArray = [];
for(let i = 0; i < myArray.length; i++ ) {
if (myArray[i] !== undefined) {
// console.log(myArray[i]);
newArray.push(myArray[i]);
}
}
return newArray;
}
// 手動移除第一個元素并重新排序
Array.prototype.removeFirstPosition = function() {
for (let i = 0; i < this.length; i++) {
this[i] = this[i + 1];
}
// 生成的新數組最后一位是undefined
return this.reIndex(this);
};
numbers = numbers.removeFirstPosition();
~~~
- 接觸數據結構和算法
- 數據結構與算法 -- 大O復雜度表示法
- 數據結構與算法 -- 時間復雜度分析
- 最好、最壞、平均、均攤時間復雜度
- 基礎數據結構和算法
- 線性表和非線性表
- 結構 -- 數組
- JS -- 數組
- 結構 -- 棧
- JS -- 棧
- JS -- 棧有效圓括號
- JS -- 漢諾塔
- 結構 -- 隊列
- JS -- 隊列
- JS -- 雙端隊列
- JS -- 循環隊列
- 結構 -- 鏈表
- JS -- 鏈表
- JS -- 雙向鏈表
- JS -- 循環鏈表
- JS -- 有序鏈表
- 結構 -- JS 字典
- 結構 -- 散列表
- 結構 -- js 散列表
- 結構 -- js分離鏈表
- 結構 -- js開放尋址法
- 結構 -- 遞歸
- 結構 -- js遞歸經典問題
- 結構 -- 樹
- 結構 -- js 二搜索樹
- 結構 -- 紅黑樹
- 結構 -- 堆
- 結構 -- js 堆
- 結構 -- js 堆排序
- 結構 -- 排序
- js -- 冒泡排序
- js -- 選擇排序
- js -- 插入排序
- js -- 歸并排序
- js -- 快速排序
- js -- 計數排序
- js -- 桶排序
- js -- 基數排序
- 結構 -- 算法
- 搜索算法
- 二分搜索
- 內插搜索
- 隨機算法
- 簡單
- 第一題 兩數之和
- 第七題 反轉整數
- 第九題 回文數
- 第十三題 羅馬數字轉整數
- 常見一些需求
- 把原始 list 轉換成樹形結構