數組 數組 1.數組:數組是一組數據(數據類型不限,任意)的有序集合 >我們寫代碼,一般一個數組只放一種數據類型的數據 2.我們寫代碼,一般一個數組只放一種類型的數據 3.註意: 大多數的語言裡面數組的存儲是連續的,但是js的數組特點決定了js的數組不一定是連續的。 數組的特點 1.作用:將許多零散 ...
數組
數組
1.數組:數組是一組數據(數據類型不限,任意)的有序集合===>我們寫代碼,一般一個數組只放一種數據類型的數據
2.我們寫代碼,一般一個數組只放一種類型的數據
3.註意: 大多數的語言裡面數組的存儲是連續的,但是js的數組特點決定了js的數組不一定是連續的。
數組的特點
1.作用:將許多零散的數據組成一個整體
2.數組本身屬於複雜數據類型(引用數據類型/對象),即我們使用的數組就是“對象”
3.數據類型不限,任意(一般一個數組只放一種數據類型的數據)
4.根據需要,對數組內部數據進行一些操作(增刪查改)
數組的創建
1.字面量的方式
例如: let arr = [];(沒有初始化值)
例如: let arr = [ 1,2,3,4,5,"6"];(初始化了六個值)
2.構造函數的方式
例如: le arr = new Array();(沒有初始化值)
例如: let arr = new Array(1,2,3,4,5,"6")(為數組初始化)
如果let arr = new Array(5)就相當於創建了五個空元素的arr數組
數組的下標
數組中存儲是數據時有序的,我們就給每一個元素加一個編號,稱之為“下標”/"索引"(index)
索引的特點: index從0開始,到 “數組元素個數-1” 結束
下標的使用: 數組名稱[index]===> 查看數據:(查詢時,越界?訪問到一個undefined值,不管學什麼語言,越界一般是不允許的)
多維數組
數組裡面嵌套數組的這種結構,就叫做多維數組。二維數組本質上就是一維數組作為了一個一維數組的元素,即數組的數組;
例如:let arr = [[1,2,3],[4,5,6]];
數組的遍歷
1.普通for迴圈
2.for...of遍歷(ES6新增的)註意:可以把value看成每次迴圈按順序取了arr中元素的值,而value不代表arr的元素,所以value的賦值不影響arr中的元素
ES6中的操作
1.擴展
“...”:擴展運算符 ===>把一個整體擴展開來,相當於解構一個數組的一個維度。
運用:
a.合併數組 let newArr = [...arr1,...arr2]
b.拷貝數組 let arr2 = [...arr1]
2.解構
等號兩邊保持解構一致(關於數組),然後按照對應的位置,把右邊的數據賦值給左邊的變數;實現批量賦值
註意
a、當左邊的變數多餘右邊的數據時:沒有對上號的變數值不變
b、當左邊的變數少餘右邊的數據時:沒有對上號的數據不影響賦值
運用場景
a、墨水交換
let num1 = 9,num2 = 0,t;
[num1,num2] = [num2,num1];
b、獲取對應的值(前面用逗號隔開)
let [,,,d,e] = arr;
排序 例如:冒泡與選擇等
1.冒泡排序
let array = [5,2,7,9,8,0,44,121,1];
for(let i = 0; i < array.length - 1; i++){
for (let j = array.length - 1; j > i; j--) {
if(array[j]<array[j - 1]){
[array[j],array[j - 1]]=[array[j - 1],array[j]];
}
}
}
console.log(array);
2.選擇排序
let array = [5,2,7,9,8,0,44,121,1];
for (let i = 0; i < array.length-1; i++) {
let min = array[i],index=i;
for (let j = 1+i; j < array.length; j++) {
if(min > array[j]){
min = array[j];
index = j;
}
}
[array[i],array[index]]=[array[index],array[i]];
}
數組的方法(都很實用)
1.添加
push(value) 概念:在尾部添加元素,並返回一個新的長度
unshift(value) 概念:在數組開頭添加元素,並返回一個新的長度
2.刪除
pop() 概念:刪除最後一個元素
shift() 概念:刪除第一個元素
splice(參數1,參數2,參數3)
第一個參數:整數,規定添加/刪除項目的位置,使用負數可從數組結尾處規定位置。
第二個參數:要刪除的項目數量。如果設置為 0,則不會刪除項目。
第三個參數以及後面的參數:可選。向數組添加的新項目。
返回值:包含被刪除項目的新數組,如果有的話。
3.查找
indexOf(value) 概念:查找所在位置(index),從頭開始查,查到第一個結束
lastIndexOf(value) 從尾部開始查找和indexOf相反
includes(value) 要查詢的值,返回有沒有(true/false)
4.提取
slice() 通過指定開始和結束索引,來提取元素(組成新數組),不影響原數組===>[start,end)
5.拼接
join("value")拼接:separator參數代表了“分隔符”
6.切割
split("value") 切割:上一個方法的反向操作
7.其它
concat()
把B數組拼接到A數組後,作為返回值返回,不影響原數組
reverse()
反序的改變原數組
sort()
預設規則是按照字典順序的
ex.sort(function(a,b){
return a-b;//結果是負數b大,正數a大,相等值為0
});
ex.reverse();
console.log(ex);//true====》沒有副本的產生,返回值就是原數組
數組的遍歷
- foreach 普通遍歷,沒有return返回值
- map 單獨處理每一個元素:會把每一個元素做return後面的處理,返回組成新的數組
- filter 過濾,滿足條件留下組成新數組
- some/every some(只要有一個滿足,返回true)/every(必須全部滿足,才返回true)
- reduce/reduceRight(迭代計算)
- 將數組第一個元素和第二個元素分別賦值給prev,next,然後通過return後面的表達式獲得一個值,該值作為下一次迴圈的prev,而next取下一個元素,直到取完所有元素,獲得的最終值作為 返回值返回