1. 程式人生 > >進擊的JavaScript小白(三)——陣列

進擊的JavaScript小白(三)——陣列

js裡面萬物皆物件。
看,我有很多物件呢。
雙十一不購物怎麼了?我是有物件的人,我不過光棍節!

一、基本資料型別和複雜資料型別的區別

1、儲存的資料個數不同

2、在記憶體中儲存的方式不同

1、基本資料型別在記憶體單元中儲存的是具體值
2、複雜資料型別在記憶體單元中儲存的是具體值的指標

3、複製操作後的結果不同

1、複製資料型別操作實際上是複製記憶體單元中儲存的那個東西
2、基本資料型別複製前後,兩個值沒有關聯
3、複雜資料型別複製前後,兩個值實際上是同一個值

二、陣列

1、陣列的作用

用於儲存多個數據

2、陣列的宣告方式

var arr = new Array(100, 98, 89, 78);
var arr = [100, 98, 89, 78]; // 這種方式是推薦方式,因為書寫簡便。

3、陣列的長度屬性

arr.length : 用於獲取陣列中的資料總個數,是數值型別

4、陣列的操作

1、元素:陣列中的資料統稱為陣列的元素
2、索引
① 陣列中的每個元素按照索引值排列,索引從零開始,依次遞增
② 由於陣列中的元素按照索引排列,陣列也被稱為是一種有序的資料儲存方式
③ 利用索引操作元素 :arr[0]
④ 陣列最後一個元素的索引值 : arr.length - 1
3、陣列的長度操作
① 將陣列的length設定為大於實際元素的個數的值,這個值沒有意義,平常不會用
② 訪問陣列中不存在的元素,預設值為undefined
③ 將陣列的length設定為1小於實際元素個數的值可以將陣列末尾的一些值刪除
4、陣列的遍歷操作 : 使用迴圈獲取陣列中的所有元素

 var arr = ['a', 'b', 'c', 'b', 'c', 'b', 'c'];
 for (var i = 0; i < arr.length; i++) {
	console.log(arr[i]);
 }

反向遍歷

	for (var i = arr.length - 1; i >= 0; i--) {
		console.log(arr[i]);
	}

5、陣列中可以有多種型別的資料,不過推薦一個數組中只儲存一種型別的資料。

三、氣泡排序

1、計數法

var arr = [1, 2, 3, 5, 4];
for (var i = 0; i < arr.length - 1; i++) {
	// 每輪程式碼執行時需要考慮,如果本輪比較中沒有發生交換操作,說明排序完畢了(上一輪)
	var count = 0; // 用於記錄本輪比較中發生交換的次數
	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;
			// 發生交換,設定計數增加
			count++;
		}
	}
	// 當本輪中所有次的比較均執行完畢,檢測count的值,如果為0,結束迴圈
	if (count === 0) {
		break;
	}
}

2、變數控制

var arr = [1, 2, 3, 5, 4];
for (var i = 0; i < arr.length - 1; i++) {
// 我們前面發現,本輪中是否進行過交換時決定是否可以跳出的關鍵點
var flag = true; // 表示假設本輪排序完畢可以結束
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;
		// 如果進入了if,阻止跳出操作
		flag = false;
	 }
}
	// 驗證flag的值
	if (flag === true) {
		break;
	 }
}

四、陣列去重

		var arr = [1, 2, 1, 1, 2, 3, 3];
		var result = [];
		// 1 遍歷arr,獲取所有元素
		for (var i = 0; i < arr.length; i++) {
			// 規則:需要使用arr[i]與result中每個元素比較,如果沒有一個是相同的,就放入
			var count = 0; // 用於保存於arr[i]相同的元素的個數
			// 2 遍歷result,獲取所有元素
			for (var j = 0; j < result.length; j++) {
				if (arr[i] === result[j]) {
					// 如果找到相同的值,設定count++
					count++;
				}
			}
			// 如果count為0,說明result中不存在當前值,放入
			if (count === 0) {
				result[result.length] = arr[i];
			}
		}

五、陣列型別檢測方法

第一個部落格我大致寫了一下資料型別的檢測方法,現在我寫一下陣列型別的檢測方法和檢測結果。
① typeof : 用於檢測大部分基本資料型別,typeof arr 的結果為object
② instanceof 操作符 : arr instanceof Array 的結果為true
③ constructor屬性 : arr.constructor === Array 的結果為true
④ Object.prototype.toString.call(資料):能夠得到資料的型別名稱
Object.prototype.toString.call(arr) 控制檯列印的結果為 ‘[object Array]’