存儲相關 Vuex 和本地存儲(如localStorage)以及 cookie 存儲(如 document.cookie)之間有一些關係,但它們是不同的概念,用於不同的目的。 Vuex: Vuex 是 Vue.js 的官方狀態管理庫,用於在 Vue.js 應用程式中管理應用程式的全局狀態。 Vuex ...
定義
數組,就是一組相關的值存儲在一塊連續的空間內
一般的高級編程語言都有數組這種數據結構
語法
數組有三種定義方式,如下
-
使用中括弧直接定義數組
var array = [12,13,14,15,16,17]
-
使用 new Array() 方法 傳入數組元素
var array = new Array('A', 'B','C','D','E')
-
使用 new Array() 方法,傳入長度, 這種不能賦值,只能指定長度
// 這種方式只能定義數組的長度是4(容納4個元素), 但並沒有給4個元素賦初值, 這4個元素的初始值都是 undefined var array = new Array(4);
JS 的數組中的數據可以不是同一種數據類型
<script>
var array = ["A", 12, true];
console.log(array);
</script>
數組的長度用 length屬性表示
<script>
var array = ["A", 12, true];
console.log(array.length);
</script>
取值
數組的取值需要有以下幾點註意
- 數組定義了下標, 傳入下標就可以得到某個值, 值得註意的是, 數組的下標從0開始計數
<script>
var array = ["A", 12, true];
console.log(array[0]);
</script>
- 如果我們傳入了一個超過數組長度的下標, 則會返回 undefined
<script>
var array = ["A", 12, true];
console.log(array[3]);
</script>
改值
如果我們要修改數組當中的某個元素, 我們只需要 用如下語法
<script>
var array = ["A", 12, true];
console.log(array);
array[0] = "B";// 修改數組中的值
console.log(array);
</script>
如果傳入的數組下標對應的位置本身沒有值, 則相當於新增元素
<script>
var array = ["A", 12, true];
console.log(array);// 如果更改了不存在的項,則相當於在此數組下標下新增項目
array[5] = "B";
console.log(array);
</script>
數組作為一種複雜的數據結構,還定義了很多方法幫助我們存取值
方法 | 功能 |
---|---|
push | 在尾部插入新項, 可以一次插入多個值 |
pop | 彈出尾部數據(在數組中傷處) |
unshift | 在頭部插入新元素 |
shift | 在頭部刪除 |
下麵是這些元素的示例
push 方法
<script>
var array = ["ABC", "EFG", "HIJ"];
array.push("EE");
array.push("CC", "DD");
console.log(array);
</script>
pop 彈出尾方法
<script>
var array = ["ABC", "EFG", "HIJ"];
console.log(array.pop());
console.log("after pop array:" + array);
</script>
unshift 數組頭部插入
<script>
var array = ["ABC", "EFG", "HIJ"];
array.unshift("kaka");
console.log("array:" + array);
</script>
<script>
var array = ["ABC", "EFG", "HIJ"];
console.log(array.shift());
console.log("array:" + array);
</script>
數組常用方法
在取值的小節中,我們已經介紹過4個常用方法;事實上數組的常用方法遠不止這些,下麵我們來補充一些
splice 方法
常用於替換、插入、刪除現有數組元素
-
用於替換數組中的指定項
<script> var array = ["A", "B", "C", "D", "E", "F", "G", "H"]; // 第一個參數 2 表示從數組下標 2 開始替換(包含數組下標2) // 第二個參數 4 表示連續替換4項, 如果長度大於 字元串剩餘長度, 則取剩餘的全部 // 從第三個參數開始就是要替換成的內容 // 返回值 resultArray 表示 已經被替換掉的元素組成的數組,在本示例中就是 ['C', 'D', 'E', 'F'] var resultArray = array.splice(2, 4, "hello", "world", "akd"); console.log(array); </script>
-
此方法還可以在指定位置插入元素
<script> var array = ["A", "B", "C", "D", "E", "F", "G", "H"]; // 第二個參數為 0 ,表示連續替換 0項, 也就是 從 數組下標2開始連續插入 三個元素 var resultArray = array.splice(2, 0, "hello", "world", "akd"); console.log(array); console.log(resultArray); </script>
-
刪除元素
<script> var array = ["A", "B", "C", "D", "E", "F", "G", "H"]; // 沒有指定的要替換的元素,也就是意味著要刪除 var resultArray = array.splice(2, 3); console.log(array); console.log(resultArray); </script>
slice 方法
常用於 從原有數組截取到一個子數組
-
slice(index1, index2) 方法 截取的子數組 從 下標 為 index1 開始, 到下標 index2 (不包含index2) 結束, 並且不會更改原有數組
<script> var array = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; // 輸出 ['B', 'C', 'D'] var arraySlice = array.slice(1, 4); console.log("arraySlice:", arraySlice); // 原數組不會改變 ['A', 'B', 'C', 'D', 'E', 'F', 'G'] console.log("array:", array); </script>
-
slice 如果不提供第二個參數(index2), 則表示從指定索引位置開始到數組結束的所有元素都會截取成為子數組
<script> var array = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var arraySplit = array.slice(1); // 輸出 ['B', 'C', 'D', 'E', 'F', 'G'] console.log("arraySplit:", arraySplit); // 輸出 ['A', 'B', 'C', 'D', 'E', 'F', 'G'] console.log("array:", array); </script>
-
slice 方法的參數允許為負數, 表示數組的倒數第幾項(從右向左 -1 開始 -N結束)
<script> var array = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; var arraySplit = array.slice(-3, -1); // 輸出 ['E', 'F'] console.log("arraySplit:", arraySplit); console.log("array:", array); </script>
concat() 方法
合併多個數組,輸出為一個, 並且 concat 數組不會改變原數組
<script>
var array1 = ['A', 'B', 'C'];
var array2 = ['D', 'E', 'F'];
var array3 = ['G', 'H', 'I'];
var resultArray = array1.concat(array2, array3);
console.log("resultArray:",resultArray);
console.log("原有array1:",array1);
</script>
reverse() 方法
將一個數組的順序取反
<script>
var array = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
var arraySplit = array.reverse();
// 處處 ['G', 'F', 'E', 'D', 'C', 'B', 'A']
console.log("arraySplit:", arraySplit);
console.log("array:", array);
</script>
indexOf() 方法
給定一個數組元素,搜索下標,如果元素不存在,則返回-1
<script>
var array = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
var index = array.indexOf('C');
// 輸出索引 2
console.log("index:", index);
</script>
includes()方法
給定一個數組元素,判斷數組中是否包含此值,返回布爾類型值
<script>
var array = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
var exists = array.includes('C');
// 輸出 true
console.log("exists:", exists);
</script>
排序
數組排序,就是將一個無序的數組變成一個有序數組, 例如 [2, 1, 3] 排序過後 變成 [1, 2, 3]
數組自帶排序的方法, 這個方法就是 sort函數。
sort 排序就是將所有數組元素轉換成字元串,並按照他們的UTF-16碼元值升序排序
sort 函數是在原有基礎上做的排序, 所以會影響到原數組的順序
基本的使用
<script>
var array = [9,2,3,1,8,7,6,5,4];
array.sort();
console.log("array:", array);
</script>
sort 也可以傳入以 函數作為參數(函數作為重要的知識,我們會在後面講到)
傳入函數的作用是影響排序規則, 排序無非由兩種 升序([1,2,3] ) 和 降序 ([3, 2, 1])
<script>
var array = [9,2,3,1,8,7,6,5,4];
// 下麵的函數更加執行結果 如果 大於 0 則 升序排列, 如果 小於 0 , 則降序排列
// function(a, b){
// return b-a;
//}
var sortArray = array.sort(function(a, b){
return b-a;
});
console.log("array:", array);
</script>
如果數組包含空槽(即某些地方沒有填值被undefined占據), 排序後所有的空槽都會被移動到數組尾部
<script>
var array = [9,2,3,1,8,7,6,5,undefined,4,undefined];
array.sort();
// 輸出 [1, 2, 3, 4, 5, 6, 7, 8, 9, undefined, undefined]
console.log(array);
</script>
如果既希望排序後的結果是一個新數組,並不影響原來的數組,可以使用 toSorted方法, toSorted方法其他的特性和 sort 方法一樣
<script>
var array = [9,2,3,1,8,7,6,5,4];
var sortedArray = array.toSorted();
console.log('sortedArray:', sortedArray);
console.log('array:', array);
</script>
關於數組排序,還有很多相關的演算法,比如冒泡排序, 快速排序, 這些排序演算法因為效率比較低,在工作中很難應用,所以這部分內容我們本節就不涉及了,如果有緣,以後可能會水一篇
遍歷
數組遍歷 就是將數組 從頭到尾迴圈一遍
數組遍歷有很多現實意義,舉個例子,遍歷一個數值型數組,找到當中的最大值。
<script>
// 生成一個隨機數組
var array = [];
// 生成一個隨機數組
for(var i = 0 ; i < 10 ; i++) {
array.push(Math.floor(Math.random(10) * 10));
}
console.log(array);
// 遍歷找到最大值
var maxValue = null;
for(var i= 0; i < array.length ; i++) {
if(maxValue == null || array[i] > maxValue) {
maxValue = array[i];
}
}
console.log('最大值為:', maxValue)
</script>
數組類型檢測
如果用 typeof 去檢測數組,則返回的結果是object
實際工作中,可以用 Array.isArray() 方法來檢測一個變數是否是數組
<script>
var array = [12, 3, 3, 3];
var flag1 = Array.isArray(array);
var flag2 = typeof array;
// true object
console.log(flag1, flag2);
var array = [];
// true
console.log(Array.isArray(array));
</script>
數組和字元串轉換
一個字元串可以調用 split 方法轉換成數組
一個數組可以使用 join 方法轉換成字元串
字元串轉數組
字元串的 split 函數傳入 分隔符, 就可以分割一個字元串為數組
<script>
var str = 'ABCDEFG';
console.log(str.split(''));
var str1 = 'A-B-C-D-E-F-G';
console.log(str1.split('-'));
</script
數組轉字元串
數組的 join 函數傳入 連接符, 就可以將一個數組轉換成字元串
<script>
var array = ['A', 'B', 'C', 'D', "E"];
console.log(array.join('-'));
console.log(array.join(''));
// 預設以逗號分隔
console.log(array.join());
</script>
二維數組
以普通數據類型作為數組元素的叫一維數組,那麼以數組作為元素的就叫做 二維數組
<script>
// 以下是一個二維數組的定義
var array = [
['A','B', 'C'],
['D','E', 'F']
];
console.log(array)
</script>
查看上面代碼的輸出結果
取值
如上面那個例子,我們想取出列印出元素’F‘應該怎麼做?
第一步,我們需要找到 F 元素所在內層數組在外層的數組的下標值, 通過觀察為 1
第二步,我們需要找到 F 元素在內層數組 的下標值, 通過觀察為 2
所以列印出 E 元素的代碼如下
<script>
// 以下是一個二維數組的定義
var array = [
['A','B', 'C'],
['D','E', 'F']
];
console.log(array)
</script>
遍歷
由數組定義的例子可以看到,二維數組就是數組嵌套數組的形式
那麼,如果我們想把二維數組最內層的元素逐個遍歷出來, 就需要遍歷兩次,外層數組遍歷一次,內層的數組也要逐個遍歷。
<script>
var array = [
['A','B', 'C'],
['D','E', 'F']
];
for(var i = 0 ; i < array.length ; i++) {
for(var j = 0 ; j < array[i].length ; j++) {
console.log(array[i][j])
}
}
</script>
既然有二維數組,肯定有三維數組、四維數組 等等,我們統稱為多維數組。
事實上,多維數組在工作中不太能用的到,既然學會了二維數組,那就等於學會了多維數組。
總結
此篇水文,我們介紹瞭如下內容, 這裡再啰嗦下
- 數組的定義和取值
- 數組的常用方法
- 數組的遍歷
- 數組的排序
- 二維數組
微信公眾號