0.前言
??最近看到有關數組方面的知識,我也真是醉了,特在此做一些總結,就當一個筆記,希望在往后的日子里,遇到相同的問題是能夠及時解決。
- 認識數組;
- 創建數組;
- 數組元素的訪問(賦值與取值);
- 數組的遍歷;
- 數組長度length、元素的更新、增加和刪除;
- 數組中常用的方法;
- 數組排序;
- 數組的數組(多維數組);
1.認識數組
所謂數組,就是相同數據類型的元素按一定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,然后用編號區分他們的變量的集合,這個名字稱為數組名,編號稱為下標。組成數組的各個變量稱為數組的分量,也稱為數組的元素,有時也稱為下標變量。數組是在程序設計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來的一種形式。這些按序排列的同類數據元素的集合稱為數組。
<strong>擴展:</strong>內置對象是JS語言自帶對象,提供了一些基本的功能,供開發者來使用。瀏覽器上跑的內置對象Math,String,Array,Date等對象
對象:屬性(變量)和方法(函數)的集合,數組就是對象,可以存儲多個不同類型的數據
2.創建數組
??創建數組有常用的兩種方法:
<strong>第一種方法:構造函數法</strong>
?1.1、使用構造函數創建空數組
var arr1(棧區) = new Array()(堆區)
注解:new的解釋如下:
(1)棧區:基本數據類型(變量)保存在棧區,會根據函數的結束而自動釋放
(2)堆區:在堆區開辟出一片內存空間存放對象,需要程序員手動開辟,并且需要手動釋放。
(3)返回堆區對象的引用(地址)
<strong>注意:</strong>arr1不是數組,是數組的引用,就是為了訪問堆區的數組對象
1.2、使用構造函數創建確定容量的數組
var arr2 = new Array(10);
1.3、使用構造函數創建一個擁有一些數據的數組*
var arr3 = new Array(1,2,"Tome",true);
<strong>第二種方法:字面量法創建數組</strong>
2.1、使用字面量法創建空數組
var arr4 = [];
[]:表示數組。
2.2、使用字面量法創建一個擁有一些數據的數組
var arr5 = [1,2,3,4,"adh",true];
注:數據直接寫在中括號里面,數據之間用逗號分開
3.數組元素的訪問(賦值與取值)
數組的格式: 數組名[下標]
注意:下標是從“0”開始的,訪問如下:
var arr = new Array(5);
arr[0] = 18;
arr[1] = 19;
arr[2] = 20;
arr[3] = 21;
arr[4] = 22;
console.log(arr);
console.log(typeof arr);
//取值(取某一個元素的值)
console.log(typeof arr[0]);
4.數組的遍歷
數組遍歷的常用方法:
<strong>(1)for循環遍歷</strong>
var arr = [1,2,3,4,5];
var sum = 0;
for (var i = 0; i < arr.length; i++) {
var num = arr[i];
sum += num;
console.log(num);
}
console.log(sum);
<strong>(2)for-in 快速遍歷</strong>
for(var j in arr){
console.log(arr[j]);
}
注意:“in”的前面的“j”針對數組來說是我們的下標
(3)forEach();是MCMAScript5.0加入的,低版本IE不能用的。
arr.forEach(function(e){
console.log(e);
});
注意:e是數組里面的每一個元素。
5.數組長度length、元素的更新、增加和刪除
什么是數組的長度?
??就是數組元素的個數。
用<strong>length</strong>表示數組的長度。
var arr = [1,2,3,4,5];
arr["name"] = "sunck";
console.log(arr.length);
console.log(arr);
運行結果:
課件數組的長度還是為5,加了字符串元素,并沒有將長度算進去,這是因為<strong>length不計算非正規(數字)下標</strong>。那么問題來了,在for-in里面length是否計算非數字的長度呢?
for (var i in arr) {
console.log(i);
}
綜上所述:length在for-in中可以遍歷
<strong>undefined的情況</strong>
arr.length = 10;
console.log(arr.length);
console.log(arr);
console.log(arr[5]);
console.log(arr[6]);
console.log(arr[7]);
console.log(arr[8]);
console.log(arr[9]);
運行結果:
因為arr的原本數組長度為5,現在給他設置為10,但是剩余空出來的位置就會變成undefined。
<strong>數組長度的減少,多余的刪除</strong>
arr.length = 3;
console.log(arr.length);
console.log(arr);
運行結果:
這是因為,本來給他設定的長度為10,現在又給他設置為3,就會裝不下數據,所以多出來的數據就會刪除掉。
<strong>添加的下表緊挨著以前最后的下標</strong>
arr[3] = 100;
console.log(arr.length);
console.log(arr);
運行的結果:
可以看到,所添加的元素,會緊跟著,最后一個正規數字元素的后面。
<strong>添加的下標距離最后的下標有一定的距離,那么中間的元素默認undefined</strong>
arr[6] = 600;
console.log(arr.length);
console.log(arr);
console.log(arr[4]);
console.log(arr[5]);
運行結果:
<strong>刪除</strong>
delete arr[2];
console.log(arr.length);
console.log(arr);
運行結果:
注意:我們用delete操作符來刪除指定的元素,數組的長度不會改變,只是對應的將值刪除為undefined
6.數組中常用的方法
<strong>(1)push(item1,item2,...)</strong>
<strong>功能:</strong>在數組的末尾添加一個或者多個元素
<strong>參數:</strong>要添加的元素
<strong>返回值:</strong>添加數據后數組的長度
var arr1 = [1,2,3,4,5];
var ret1 = arr1.push(9,10,23);
console.log(arr1);
console.log(arr1.length);
console.log(ret1);
<strong>(2)unshift(item1,item2,...)</strong>
<strong>功能:</strong>在數組的頭添加一個或者多個元素
<strong>參數:</strong>要添加的元素
<strong>返回值:</strong>添加數據后數組的長度
var arr2 = [1,2,3,4,5];
var ret2 = arr2.unshift(0);
console.log(arr2);
console.log(arr2.length);
console.log(ret2);
<strong>(3)pop()</strong>
<strong>功能:</strong>在數組的末尾刪除一個元素
<strong>參數:</strong>無
<strong>返回值:</strong>被刪除的元素
var arr3 = [1,2,3,4,9];
var ret3 = arr3.pop();
console.log(arr3);
console.log(arr3.length);
console.log(ret3);
<strong>(4)shift()</strong>
<strong>功能:</strong>在數組的頭刪除一個元素
<strong>參數:</strong>無
<strong>返回值:</strong>被刪除的元素
var arr4 = [1,2,3,4,5];
var ret4 = arr4.shift();
console.log(arr4);
console.log(arr4.length);
console.log(ret4);
<strong>(5)join(str)</strong>
<strong>功能:</strong>將數組的元素用參數字符串拼接成一個新的字符串
<strong>參數:</strong>一個字符串
<strong>返回值:</strong>拼接的結果字符串
var arr5 = [1,2,3,4,5];
var ret5 = arr5.join("good");
console.log(arr5);
console.log(arr5.length);
console.log(ret5);
console.log(typeof ret5);
<strong>(6)reverse()</strong>
<strong>功能:</strong>倒置數組
<strong>參數:</strong>無
<strong>返回值:</strong>倒置以后的數組
var arr6 = [1,2,3,4,5];
var ret6 = arr6.reverse();
console.log(arr6);
console.log(arr6.length);
console.log(ret6);
console.log(typeof ret6);
<strong>(7)slice(startIndex,endIndex)</strong>
<strong>功能:</strong>在數組中從startIndex下標開始一直截取到endIndex下標之前
<strong>參數:</strong>開始與結束的下標
<strong>返回值:</strong>截取的數據數組
var arr7 = [1,2,3,4,5,6,7,8,9,10];
var ret7 = arr7.slice(3,7);
console.log(arr7);
console.log(ret7);
<strong>(8)splice(下標,個數,item1,item2...)</strong>
<strong>功能:</strong>是在數組的中間添加或者刪除一些元素
<strong>必選參數:</strong>下標、個數
<strong>可選參數:</strong>item1,item2...
<strong>返回值:</strong>
添加:個數為0,從下標處開始添加可選參數中的元素
注意:如果下標大于了原數組的最大的下標,都是在數組最后添加元素
var arr9 = [1,2,3,4,5];//1,2,8,9,3,4,5
var ret9 = arr9.splice(7, 0, 8, 9);
console.log(arr9);
console.log(arr9.length);
console.log(ret9);
console.log(ret9.length);
刪除:不需要可選參數,從下標開始刪除對應個數個元素
返回值:刪除的元素數組
var arr10 = [1,2,3,4,5,6,7,8,9,10];
var ret10 = arr10.splice(2, 6);
console.log(arr10);
console.log(arr10.length);
console.log(ret10);
console.log(ret10.length);
<strong>(9)concat(arr1, arr2...)</strong>
<strong>功能:</strong>將多個數組拼接成一個數組
<strong>參數:</strong>一個或者多個數組
<strong>返回值:</strong>拼接之后新的數組,新的數組的元素是所有數組的元素
var arr8 = [1,2,3];
var num8 = [4,5,6];
var str8 = [7,8,9];
var ret8 = num8.concat(arr8, str8);
console.log(ret8);
console.log(arr8);
console.log(num8);
console.log(str8);
<strong>(10)indexOf(item)</strong>
<strong>功能:</strong>從數組的左側開始查找對應第一次出現的參數元素的下標
<strong>參數:</strong>元素值
<strong>返回值:</strong>如果找到了對應的元素則返回該元素的下標值,否則返回-1
var arr11 = [1,2,3,3,4,5,3,7,8];
var ret11 = arr11.indexOf(9);
console.log(ret11);
console.log(arr11);
<strong>(11)lastIndexOf(item)</strong>
<strong>功能:</strong>從數組的右側開始查找對應第一次出現的參數元素的下標
<strong>參數:</strong>元素值
<strong>返回值:</strong>如果找到了對應的元素則返回該元素的下標值,否則返回-1
var arr12 = [1,2,3,3,4,5,3,7,8];
var ret12 = arr12.lastIndexOf(3);
console.log(ret12);
console.log(arr12);
7.數組排序
<strong>(1)冒泡排序</strong>
原理:
54321->45321->43521->43251->43215 4
0 1 1 2 2 3 3 4
43215->34215->32415->32145 3
0 1 1 2 2 3
32145->23145->21345 2
0 1 1 2
21345->12345 1
0 1
var arr = [4,5,3,1,2];
// 數組元素個數-1
for (var i = 0; i < arr.length - 1; i++) {
// 數組元素個數-1-i
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] <= arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
<strong>(2)sort排序</strong>
注意:sort默認升序排序
var str = [4,5,3,1,2];
str.sort();
console.log(str);
如果要排降序,必須給出排序的標準,排序的標準是一個函數。
str.sort(compare);
function compare(v1, v2) {
if (v1 < v2) {
return 1;
}
return -1;
}
console.log(str);
8.數組的數組(多維數組)
/**
* 多維數組:數組的元素是數組
*/
var a = [1,2,3];
var b = [4,5,6];
var c = [7,8,9];
var arr = [a,b,c];
console.log(arr);
console.log(arr[1][2]);
9.總結
??數組的總結,就這么多了,如果有其他要補充的,歡迎來信。