1. 程式人生 > >JavaScript之陣列API、棧和佇列、氣泡排序

JavaScript之陣列API、棧和佇列、氣泡排序

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();