1.模擬資料結構棧
pop()從陣列尾部彈出一個元素並返回彈出的元素。尾部是指索引最大的元素。陣列的長度會減 1;
push(); //從陣列的尾部壓入一個元素,並返回陣列的新長度 ,陣列長度+1
// 棧方法:可以對比彈夾
// 陣列可以通過 push 和 pop 兩個方法形成棧資料結構。
var t = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(t.length)
console.log(t);
t.pop();
console.log(t);
// 從陣列的末尾彈出一個元素。並返回彈出的陣列元素。陣列的長度-1
t.pop();
console.log(t);
// 壓入一個元素。
var r = t.push(3);
console.log(r);
console.log(t);
棧是一種資料結構,特點就是 後入先出。
2.陣列模擬佇列
shift();//從陣列的頭部彈出一個元素,並返回此元素
unshift()//從陣列的頭部壓入一個元素,並返回 length
用 push 和 shift 方法可以將陣列模擬成佇列的資料結構。
// 用陣列模擬佇列資料結構
var t = [];
// 往佇列裡面放入 1, 2, 3 三個元素。
t.push(1);
t.push(2);
t.push(3);
console.log(t);
// 出隊一個元素。 1
console.log(t.shift());
console.log(t);
// 再出隊一個元素。
console.log(t.shift()); //2
console.log(t);
// 佇列的特點就是先進先出。
棧和佇列的資料結構總結:
棧資料結構: 先進後出。
佇列資料結構: 先進先出。
3.排序方法
reverse();//對原陣列進行逆序
Reverse 方法可以對原陣列的資料進行逆序,原來的陣列會收到影響。
var t = ["a", "b", "c", "d", "e"];
t.reverse();
console.log(t);
// ["e", "d", "c", "b", "a"]
sort();//轉成字串排序
sort 方法對原陣列進行排序,會對原陣列有影響,預設從升序(從小到大)進行排序。
排序比較的演算法是利用字串比較的演算法,如果是其他型別的元素,會先轉成字串再進行比較。
// 對陣列進行排序
var t = ['c', 'b', 'd', 'e', 'a'];
console.log(t);
t.sort(); // 對陣列中的元素進行排序
console.log(t);
// => ["a", "b", "c", "d", "e"]
// 如果是數字進行排序
var arr = [33, 10, 1, 22, 12, 222, 30];
console.log(arr);
// sort 方法是按照字串進行比較大小規則計算排序的。
// 如果陣列中的元素不是字串型別會轉成字串後進行比較。
arr.sort();
console.log(arr);
// => [1, 10, 12, 22, 222, 30, 33]
4. sort 排序高階應用
函式可以作為引數傳遞給其他函式進行使用。函式本身也是很一個物件。這就是函數語言程式設計的要訣。
陣列的 sort 方法可以接收一個型別為函式的引數,此函式接收兩個引數,要求返回值為:負數, 0,
正數。如果返回負數代表第一個引數小於第二個引數,0 為相等,正數則大於
[1, 3, 20, 11, 9].sort(function (a, b) {
if( a > b) {
return 1;
} else if( a == b) {
return 0;
} else {
return -1;
}
});
// 此函式接收兩個引數,要求返回值為:負數, 0, 正數。如果返回負數代表第一個引數小於第二個參
數,0 為相等,正數則大於
// 定義一個變數,變數的型別的是 function
var compareFun = function (a, b) {
return a - b; // a ==b, a-b =0 a<b, a-b =負數
};
var m = [ 3, 20, 10 , 9, 11, 12];
console.log(m);
// 預設是轉成字串後比較大小。
// m.sort();
// console.log(m);
// 利用函數語言程式設計,sort 方法可以接受一個比較大小的函式,例如數值比較大小的方法進行排序。
// m.sort(compareFun);
// console.log(m);
// 進一步優化。由於匿名函式只用一次,沒有必要建立一個變數。直接可以吧匿名函式的表示式傳遞到
sort 函式裡去就行。
m.sort(function(a, b) {
return a-b;
});
console.log(m);
5 陣列的連線方法
concat();
連線原陣列的元素和傳遞的引數形成一個新陣列並返回,不影響原來的陣列。
如果傳入的引數是陣列,會把陣列中的元素跟原陣列的元素進行合併成一新陣列。
[1, 2,3].concat(9,1,4); // => [1, 2, 3, 9, 1, 4]
[1, 2,3].concat([9,true]); // => [1, 2, 3, 9, true]
[1, 2,3].concat([9,true, ['22',4, 9], 33])
//=> [1, 2, 3, 9, true, Array(3), 33]
var t = [1, 2, 3];
console.log(t);
// 呼叫陣列的連結方法,不會影響原來的數字,函式會返回一個新的拼接的陣列。
var newArr = t.concat('ss', true, 222);
console.log(t); // => [1, 2, 3]
console.log(newArr);
var newArr2 = t.concat(['laoma', 'beijing', 999]);
console.log(newArr2);
join();
可以把陣列的元素(項)連線成字串,接收一個引數為連線符號,預設是逗號,返回的結果為字串。
[1, 2, 3].join(); //=> 1,2,3
[4,true, 3].join(“-”) ; // => 4-true-3
var t = [1, 2, 3];
// toString 方法會把陣列轉成字元,重寫了原型的方法。
// 把陣列中的元素都轉成字串然後用逗號分隔不同的元素。
console.log(t.toString());
// join 方法也可以將陣列轉成字串,預設跟 toString 一樣。
console.log(t.join());
// join 發方法可以傳一個引數,用來分隔陣列中的元素
console.log(t.join('-'));
console.log(t.join('|'));
6.slice 方法
slice();//複製陣列的一部分
擷取陣列的一個片段或者子陣列
接收 1 個到 2 個引數。引數:擷取陣列起始索引和結束索引
如果只指定一個引數代表:從索引位置到陣列結尾。
引數如果是負數代表從陣列末尾計算索引位置。
此方法只能從陣列前面往後面擷取,如果第二個引數在第一個引數的前面則返回空陣列[];
陣列只能往後擷取,不能向前擷取,如果向前擷取返回[]
此方法對原陣列沒有影響。
m = [1,2,3,4,5];
m.slice(2); //=>[3, 4, 5]
m.slice(-3); //=>[3, 4, 5]
m.slice(3, 4);//=> [4]
m.slice(-3, -1);//=>[3, 4]
var t = [0,1,2,3,4,5];
console.log( t );
// slice:複製陣列的一部分。
// 傳一個引數時候,是從引數的索引位置開始擷取到陣列的最後。
var a1 = t.slice(2); //從索引位置 2 開始擷取到陣列的最後。
// a1= [2, 3, 4, 5]
console.log( a1 );
// 傳兩個引數:從第一個引數作為索引位置開始,到第二個引數作為索引前面的那個元素結束,擷取陣列
切片。對原陣列沒有任何影響。
var a2 = t.slice(2, 5); // a2=> [2,3,4]
console.log(a2);
console.log(t); // [0, 1, 2, 3, 4, 5] 對原陣列沒有影響
// 如果傳遞 的是負數,那麼從陣列結尾開始計算。 但是不要用。
// slice 方法只能往後擷取,如果往前擷取返回[];
var a3 = t.slice(-3, -1); // a3 => [3,4]
console.log(a3);
7.splice 方法
在原陣列上進行插入或者刪除陣列元素,會影響原來陣列。
返回的結果是刪除的元素組成的陣列。
引數:可以接受 1 個引數,2 個引數或者 2 個以上的引數。
第一個引數是刪除資料的索引位置
第二個引數是要刪除陣列元素的個數
第三個引數開始是要插入到原陣列中的元素,插入的位置從第一個引數所在的索引開始。
//刪除資料
[1, 2, 3, 4, 5].splice(2);//=> [3, 4, 5] 原陣列:[1,2]
[1, 2, 3, 4, 5].splice(3,2);// =>[4, 5] 原陣列:[1,2,3]
[1, 2, 3, 4, 5].splice(-2); // =>[4, 5] 原陣列:[1,2,3]
a = [1,2,3,4,5];
a.splice(3,2,33,'222',[99,98]);//=>[4,5]
//a=>[1, 2, 3, 33, "222", Array(2)]
//插入資料:
a=[1,2,3]; a.splice(1,0,5,6);//=>[] a=[1,5,6,23]
//替換資料:
a=[1,2,3];a.splice(1,1,4);//=>[2] a=[1,4,3]
8.陣列繼承的方法
• toString()方法
• 它會將陣列中的每個元素轉成字串並用逗號連線起來。
• 類似join()方法的預設情況。
• [1, 3, 5].toString();//=> “1,3,5”
• toLocalString()方法
• valueOf()方法
9.陣列案例
陣列資料:[90, 8, 34, 2, 39, 87, 22, 10]
1.將陣列內容進行反序
2.求一個資料陣列中的最小值及它的索引
3.求一個陣列中的資料的平均值與和。
4.陣列的資料進行排序
5.給定一個陣列,請去掉陣列中的重複資料。
6.氣泡排序演算法