JavaScript之陣列API、棧和佇列、氣泡排序
阿新 • • 發佈:2019-02-15
API:已經實現的方法,我們開發人員可以直接呼叫,不需要知道原始碼。
將陣列轉化為字串
//1.
var str = arr.toString();
- 返回陣列中的元素用逗號分隔。
var arr = ["s","t","r"];
var str = arr.toString();
console.log(str);//s,t,r
//2.
var str = arr.join("/*連線符*/");
有關join()的使用:
1.無縫拼接陣列每個元素:var str = arr.join(“”);
- 如果括號內不加”“,等效於arr.toString()方法,用逗號分隔。
2.講單詞拼接為句子:var str = arr.join(“”);
3.將陣列拼接為html元素。
var arr = ["Hello","World"];
var str = arr.join("");
console.log(str);//HelloWorld
優化:
- 陣列拼接比字串拼接效率更高;
- 凡是頻繁的字串拼接,都要兩步:
(1).先將要拼接的子字元放入一個數組中;
(2).呼叫陣列的join方法,一次性生成結果字串。
拼接陣列
var newArr = arr1.concat(arr2,值1,值2,... );
- concat不修改原陣列,總是返回一個新陣列。
var arr1 = [1,2,3];
var arr2 = [4,5,6];
var newArr = arr1.concat(arr2,7,8);
console.log(newArr);//[1,2,3,4,5,6,7,8]
獲取子陣列
var subArr = arr.slice(starti,endi+1);
- starti:開始獲取的下標的位置;
- endi:表示獲取到的下標的位置;
- 含頭不含尾,所以slice方法的最後一個引數是endi+1;
- slice方法支援負引數,其實負數的下標是不存在的,假定的負數下標從-1開始。
var arr = [1,2,3,4,5];
var subArr = arr.slice(1,4);
console.log(subArr);//[2,3,4]
刪除、插入、替換
1.刪除
arr.splice(starti,n);
- splice方法直接修改原陣列;
- 從starti位置開始,刪除n個元素。
var arr = [1,2,3,4,5];
arr.splice(1,2)
console.log(arr);//[1,4,5]
2.插入
arr.splice(starti,0,新值1,新值2,...);
- 在starti位置開始插入新值1,新值2,…;
- 原starti位置及其之後的元素,被向後順移。
var arr = [1,2,3,4,5];
arr.splice(2,0,7,8,9);
console.log(arr);//[1,2,7,8,9,3,4,5]
3.替換
arr.splice(starti,n,新值1,新值2,...);
- 新元素的個數和n不一定相等;
- 陣列會自動調整元素的位置和長度。
var arr = [1,2,3,4,5];
arr.splice(1,2,7,8);
console.log(arr);//[1,7,8,4,5]
var arr = [1,2,3,4,5];
arr.splice(1,2,7,8,9);
console.log(arr);//[1,7,8,9,4,5]
顛倒陣列中所有元素的位置
arr.reverse();
var arr = [1,2,3,4,5];
arr.reverse();
console.log(arr);//[5,4,3,2,1]
陣列排序(sort方法及氣泡排序)
1.陣列的sort方法
arr.sort();
- 預設按升序排列;
- 預設一切都轉為字串,再按字串比大小。
var arr = [2,35,1,4,12];
arr.sort();
console.log(arr);//[1,12,2,35,4]
//我們想要的結果是:[1,2,4,12,35]
- 從上面的例子可以看出sort方法對陣列排序是有一些問題的,由於一切都轉為字串,所以導致排序並不是想我們預想的那樣。
- 所以我們要自定義排序規則:
(1).定義比較器函式:專門比較任意兩值大小的函式。
規定兩個引數(a,b),必須返回數字,如果a>b,就返回正數;如果a<b,就返回負數;如果a=b,就返回0.
(2).將比較器函式物件作為引數傳入sort方法中。
arr.sort(比較器函式);——函式名不加圓括號。
function compare(a,b){
return parseFloat(a)-parseFloat(b);
}
var arr=[2,35,1,4,12];
console.log(arr.sort(compare));//[1,2,4,12,35]
2.氣泡排序
有關氣泡排序我就不多說了,一看這個名字,相信大家都明白。
for(var r=1;r<=arr.length-1;r++){
for(var i=0;i<arr.length-r;i++){
if(arr[i>arr[i+1]){
arr[i]+=arr[i+1];
arr[i+1]=arr[i]-arr[i+1];
arr[i]-=arr[i+1];
}
}
}
棧和佇列:其實都是陣列,只不過使用了不同的方法;
棧:一端封閉,只能從另一端進出的陣列。
LIFO——後進先出
1.結尾出入棧
入棧:arr.push(新值);
arr.push(新值) 相當於陣列中的:arr[arr.length] = 新值;
出棧:var last = arr.pop();
- 無論出入棧影響已有元素的位置。——效率高
2.開頭出入棧
入棧:arr.unshift(新值);
出棧:var first = arr.shift();
- 每次出入棧都會影響所有剩餘元素位置順序。——效率低
佇列:只能從一端進入,必須從另一端出。
FIFO——先進先出
結尾入佇列:arr.push(新值);
開頭出佇列:var first = arr.shift();