1.模擬數(shù)據(jù)結(jié)構(gòu)棧
pop()從數(shù)組尾部彈出一個元素并返回彈出的元素心例。尾部是指索引最大的元素累贤。數(shù)組的長度會減 1炭玫;
push(); //從數(shù)組的尾部壓入一個元素,并返回數(shù)組的新長度 ,數(shù)組長度+1
// 棧方法:可以對比彈夾
// 數(shù)組可以通過 push 和 pop 兩個方法形成棧數(shù)據(jù)結(jié)構(gòu)狭园。
var t = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(t.length)
console.log(t);
t.pop();
console.log(t);
// 從數(shù)組的末尾彈出一個元素缀蹄。并返回彈出的數(shù)組元素。數(shù)組的長度-1
t.pop();
console.log(t);
// 壓入一個元素排拷。
var r = t.push(3);
console.log(r);
console.log(t);
棧是一種數(shù)據(jù)結(jié)構(gòu)侧漓,特點(diǎn)就是 后入先出。
2.數(shù)組模擬隊列
shift();//從數(shù)組的頭部彈出一個元素监氢,并返回此元素
unshift()//從數(shù)組的頭部壓入一個元素火架,并返回 length
數(shù)組模擬隊列.png
用 push 和 shift 方法可以將數(shù)組模擬成隊列的數(shù)據(jù)結(jié)構(gòu)鉴象。
// 用數(shù)組模擬隊列數(shù)據(jù)結(jié)構(gòu)
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);
// 隊列的特點(diǎn)就是先進(jìn)先出淆游。
棧和隊列的數(shù)據(jù)結(jié)構(gòu)總結(jié):
棧數(shù)據(jù)結(jié)構(gòu): 先進(jìn)后出。
隊列數(shù)據(jù)結(jié)構(gòu): 先進(jìn)先出隔盛。
3.排序方法
reverse();//對原數(shù)組進(jìn)行逆序
Reverse 方法可以對原數(shù)組的數(shù)據(jù)進(jìn)行逆序犹菱,原來的數(shù)組會收到影響。
var t = ["a", "b", "c", "d", "e"];
t.reverse();
console.log(t);
// ["e", "d", "c", "b", "a"]
sort()吮炕;//轉(zhuǎn)成字符串排序
sort 方法對原數(shù)組進(jìn)行排序腊脱,會對原數(shù)組有影響,默認(rèn)從升序(從小到大)進(jìn)行排序龙亲。
排序比較的算法是利用字符串比較的算法陕凹,如果是其他類型的元素,會先轉(zhuǎn)成字符串再進(jìn)行比較鳄炉。
// 對數(shù)組進(jìn)行排序
var t = ['c', 'b', 'd', 'e', 'a'];
console.log(t);
t.sort(); // 對數(shù)組中的元素進(jìn)行排序
console.log(t);
// => ["a", "b", "c", "d", "e"]
// 如果是數(shù)字進(jìn)行排序
var arr = [33, 10, 1, 22, 12, 222, 30];
console.log(arr);
// sort 方法是按照字符串進(jìn)行比較大小規(guī)則計算排序的杜耙。
// 如果數(shù)組中的元素不是字符串類型會轉(zhuǎn)成字符串后進(jìn)行比較。
arr.sort();
console.log(arr);
// => [1, 10, 12, 22, 222, 30, 33]
4. sort 排序高級應(yīng)用
函數(shù)可以作為參數(shù)傳遞給其他函數(shù)進(jìn)行使用拂盯。函數(shù)本身也是很一個對象佑女。這就是函數(shù)式編程的要訣。
數(shù)組的 sort 方法可以接收一個類型為函數(shù)的參數(shù)谈竿,此函數(shù)接收兩個參數(shù)团驱,要求返回值為:負(fù)數(shù), 0空凸,
正數(shù)店茶。如果返回負(fù)數(shù)代表第一個參數(shù)小于第二個參數(shù),0 為相等劫恒,正數(shù)則大于
[1, 3, 20, 11, 9].sort(function (a, b) {
if( a > b) {
return 1;
} else if( a == b) {
return 0;
} else {
return -1;
}
});
// 此函數(shù)接收兩個參數(shù)贩幻,要求返回值為:負(fù)數(shù), 0两嘴, 正數(shù)丛楚。如果返回負(fù)數(shù)代表第一個參數(shù)小于第二個參
數(shù),0 為相等憔辫,正數(shù)則大于
// 定義一個變量趣些,變量的類型的是 function
var compareFun = function (a, b) {
return a - b; // a ==b, a-b =0 a<b, a-b =負(fù)數(shù)
};
var m = [ 3, 20, 10 , 9, 11, 12];
console.log(m);
// 默認(rèn)是轉(zhuǎn)成字符串后比較大小。
// m.sort();
// console.log(m);
// 利用函數(shù)式編程贰您,sort 方法可以接受一個比較大小的函數(shù)坏平,例如數(shù)值比較大小的方法進(jìn)行排序拢操。
// m.sort(compareFun);
// console.log(m);
// 進(jìn)一步優(yōu)化。由于匿名函數(shù)只用一次舶替,沒有必要創(chuàng)建一個變量令境。直接可以吧匿名函數(shù)的表達(dá)式傳遞到
sort 函數(shù)里去就行。
m.sort(function(a, b) {
return a-b;
});
console.log(m);
5 數(shù)組的連接方法
concat()顾瞪;
連接原數(shù)組的元素和傳遞的參數(shù)形成一個新數(shù)組并返回舔庶,不影響原來的數(shù)組。
如果傳入的參數(shù)是數(shù)組陈醒,會把數(shù)組中的元素跟原數(shù)組的元素進(jìn)行合并成一新數(shù)組惕橙。
[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);
// 調(diào)用數(shù)組的鏈接方法,不會影響原來的數(shù)字,函數(shù)會返回一個新的拼接的數(shù)組钉跷。
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();
可以把數(shù)組的元素(項)連接成字符串弥鹦,接收一個參數(shù)為連接符號,默認(rèn)是逗號,返回的結(jié)果為字符串。
[1, 2, 3].join(); //=> 1,2,3
[4,true, 3].join(“-”) ; // => 4-true-3
var t = [1, 2, 3];
// toString 方法會把數(shù)組轉(zhuǎn)成字符爷辙,重寫了原型的方法彬坏。
// 把數(shù)組中的元素都轉(zhuǎn)成字符串然后用逗號分隔不同的元素。
console.log(t.toString());
// join 方法也可以將數(shù)組轉(zhuǎn)成字符串犬钢,默認(rèn)跟 toString 一樣苍鲜。
console.log(t.join());
// join 發(fā)方法可以傳一個參數(shù)思灰,用來分隔數(shù)組中的元素
console.log(t.join('-'));
console.log(t.join('|'));
6.slice 方法
slice()玷犹;//復(fù)制數(shù)組的一部分
截取數(shù)組的一個片段或者子數(shù)組
接收 1 個到 2 個參數(shù)。參數(shù):截取數(shù)組起始索引和結(jié)束索引
如果只指定一個參數(shù)代表:從索引位置到數(shù)組結(jié)尾洒疚。
參數(shù)如果是負(fù)數(shù)代表從數(shù)組末尾計算索引位置歹颓。
此方法只能從數(shù)組前面往后面截取,如果第二個參數(shù)在第一個參數(shù)的前面則返回空數(shù)組[];
數(shù)組只能往后截取油湖,不能向前截取巍扛,如果向前截取返回[]
此方法對原數(shù)組沒有影響。
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:復(fù)制數(shù)組的一部分乏德。
// 傳一個參數(shù)時候撤奸,是從參數(shù)的索引位置開始截取到數(shù)組的最后。
var a1 = t.slice(2); //從索引位置 2 開始截取到數(shù)組的最后喊括。
// a1= [2, 3, 4, 5]
console.log( a1 );
// 傳兩個參數(shù):從第一個參數(shù)作為索引位置開始胧瓜,到第二個參數(shù)作為索引前面的那個元素結(jié)束,截取數(shù)組
切片郑什。對原數(shù)組沒有任何影響府喳。
var a2 = t.slice(2, 5); // a2=> [2,3,4]
console.log(a2);
console.log(t); // [0, 1, 2, 3, 4, 5] 對原數(shù)組沒有影響
// 如果傳遞 的是負(fù)數(shù),那么從數(shù)組結(jié)尾開始計算蘑拯。 但是不要用钝满。
// slice 方法只能往后截取兜粘,如果往前截取返回[];
var a3 = t.slice(-3, -1); // a3 => [3,4]
console.log(a3);
7.splice 方法
在原數(shù)組上進(jìn)行插入或者刪除數(shù)組元素,會影響原來數(shù)組弯蚜。
返回的結(jié)果是刪除的元素組成的數(shù)組孔轴。
參數(shù):可以接受 1 個參數(shù),2 個參數(shù)或者 2 個以上的參數(shù)熟吏。
第一個參數(shù)是刪除數(shù)據(jù)的索引位置
第二個參數(shù)是要刪除數(shù)組元素的個數(shù)
第三個參數(shù)開始是要插入到原數(shù)組中的元素距糖,插入的位置從第一個參數(shù)所在的索引開始。
//刪除數(shù)據(jù)
[1, 2, 3, 4, 5].splice(2);//=> [3, 4, 5] 原數(shù)組:[1,2]
[1, 2, 3, 4, 5].splice(3,2);// =>[4, 5] 原數(shù)組:[1,2,3]
[1, 2, 3, 4, 5].splice(-2); // =>[4, 5] 原數(shù)組:[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)]
//插入數(shù)據(jù):
a=[1,2,3]; a.splice(1,0,5,6);//=>[] a=[1,5,6,23]
//替換數(shù)據(jù):
a=[1,2,3];a.splice(1,1,4);//=>[2] a=[1,4,3]
8.數(shù)組繼承的方法
? toString()方法
? 它會將數(shù)組中的每個元素轉(zhuǎn)成字符串并用逗號連接起來牵寺。
? 類似join()方法的默認(rèn)情況悍引。
? [1, 3, 5].toString();//=> “1,3,5”
? toLocalString()方法
? valueOf()方法
9.數(shù)組案例
數(shù)組數(shù)據(jù):[90, 8, 34, 2, 39, 87, 22, 10]
1.將數(shù)組內(nèi)容進(jìn)行反序
2.求一個數(shù)據(jù)數(shù)組中的最小值及它的索引
3.求一個數(shù)組中的數(shù)據(jù)的平均值與和。
4.數(shù)組的數(shù)據(jù)進(jìn)行排序
5.給定一個數(shù)組帽氓,請去掉數(shù)組中的重復(fù)數(shù)據(jù)趣斤。
6.冒泡排序算法