數組2
1. ***數組:
API:
拼接和選取
修改
翻轉
****排序: 自定義排序算法: 冒泡排序
sort()
1. 拼接和選取:
拼接: 將其它元素或其它數組拼接到當前數組末尾,返回新數組
var newArr=arr1.concat(值1,值2,arr2,......)
強調: 1. 無權修改原對象,只能返回新對象
2. 打散傳入的數組參數——珍貴
選取: 復制原數組中指定位置的元素組成新數組
var subArr=arr1.slice(starti,endi+1);
強調: 1. 無權修改原對象,只能返回新對象
2. 規律: 所有兩個參數都是下標的API,都含頭不含尾
簡寫: 1. 省略第二個參數: arr1.slice(starti)
從starti位置一直選取到結尾
2. 不寫參數: arr1.slice()——復制整個數組中所有元素
3. 如果離結尾近:
arr1.slice(arr1.length-n,arr1.length-m+1)
選擇倒數第n到倒數第m的元素
arr1.slice(-n,-m+1);
2. 修改數組splice: 刪除,插入,替換
刪除: arr.splice(starti,n) 從arr中starti開始,刪除n個元素
強調: 1. 不遵循含頭不含尾
2. 直接修改原數組
3. starti也支持負數參數,表示倒數第n個位置
簡寫: 省略第二個參數: arr.splice(starti) 刪除starti後所有
返回值: var deletes=arr.splice(starti,n)
返回被刪除的元素組成的臨時新數組
插入: arr.splice(starti,0,值1,值2,...)
在arr中starti位置插入: 值1,值2,...
原starti位置及其之後的值,向後順移
強調: 不能打散數組參數
替換: arr.splice(starti,n,值1,值2,...)
在arr中先刪除starti位置後的n個元素
再在starti位置插入新元素
強調: 刪除的元素個數和插入的新元素個數不必一樣
數組自動調整length
3. 翻轉數組: arr.reverse();
4. ****排序:
自定義排序算法: 冒泡,快速,插入
冒泡: 原理:
1. ***數組:
排序:
棧和隊列:
二維數組:
2. ***String
1. 排序:
自定義排序: 冒泡
排序API: arr.sort();
大問題: 默認將所有元素轉為字符串再按字符串排列
只能對字符串類型的元素正確排序
解決: 自定義比較規則:
比較器函數: 專門比較任意兩值大小的函數:
要求: 兩個參數: a,b
返回值: 如果a>b,就返回正數
如果a<b,就返回負數
如果a=b,就返回0
最簡單的數字比較器函數:
function compare(a,b){return a-b;}
如何使用: 將比較器函數名作為參數傳入sort函數中
arr.sort(compare) //強調: 不要加()
compare函數作為參數傳入sort中,被sort反復調用
降序: 顛倒比較器函數的正負號,可改升序為降序
最簡單的數字降序比較器函數:
function compare(a,b){return b-a;}
2. 棧和隊列: js中沒有專門的棧和隊列類型
一切棧和隊列都是用普通數組模擬的
棧: 一端封閉,只能從另一端進出的數組
特點: FILO
何時: 今後只要希望始終使用最新的元素時
如何:
1. 從結尾出入棧:
入: arr.push(值) => arr[arr.length]=值
出: var last=arr.pop()
特點: 每次出入棧,都不影響其他元素的位置
2. 從開頭出入棧:
入: arr.unshift(值)
出: var first=arr.shift()
特點: 每次出入棧,其它元素位置都會依次順移
隊列: 只能從一端進入,從另一端出的數組
特點: FIFO
何時: 只要希望按先後順序使用數組中的元素時
1. 結尾入: 入: arr.push(值)
2. 開頭出: var first=arr.shift()
3. 二維數組:
什麽是: 數組中的元素又引用了另一個子數組
何時: 1. 保存橫行豎列的二維數據結構
2. 對一組數據,再進行細致分類時
如何:
創建: 2種:
1. 創建數組時,還不知道子數組的內容:
var arr=[];
arr[0]=[值1,值2,...];
arr[1]=[值1,值2,...];
2. 創建數組同時初始化元素:
var arr=[
[值1,值2,...],
[值1,值2,...],
...
]
訪問: arr[r][c]->用法和普通數組元素的用法完全一樣
強調: 二維數組,行下標r不能越界!——報錯!
遍歷: 外層循環控制行,內層循環控制列
for(var r=0; r<arr.length; r++){//遍歷每一行
for(var c=0;c<arr[r].length;c++){//遍歷第r行中每一列
arr[r][c]//當前元素
}
}
練習: Math.random() 生成0~1之間的一個隨機小數
本文出自 “祝融與火” 博客,謝絕轉載!
數組2