1. 程式人生 > >數組2

數組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