JavaScript基础——数组


数组

为什么要学习数组

之前学习的数据类型,只能存储一个值(比如:Number/String。我们想存储班级中所有学生的姓名,此时该如何存储?

数组的概念

所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。

数组的定义

数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。

通过数组字面量创建数组

// 创建一个空数组
var arr1 = [];
// 创建一个包含3个数值的数组,多个数组项以逗号隔开
var arr2 = [1, 2, 3];
// 创建一个包含2个字符串的数组
var arr3 = ['a', 'b'];

// 可以通过数组的length属性获取数组的长度
console.log(arr3.length); // 2
// 可以设置length属性改变数组中元素的个数
arr3.length = 0; // 清空数组

获取数组元素

格式

array[/*下标*/]  // 下标又称索引

功能:获取数组对应下标的那个值,如果下标不存在,则返回undefined

案例

var arr = ['red', 'blue', , 'yellow', 'black'];
arr[0]; // red
arr[1]; // blue
arr[2]; // undefined,没有定义值
arr[3]; // yellow
arr[5]; // undefined,这个数组的最大下标为4,因此返回undefined

遍历数组

遍历:遍及所有,对数组的每个元素都访问一次就叫遍历。

数组遍历的基本语法:

var arr = [0, 2, 5, 5]
for (var i = 0; i < arr.length; i++) {
    // 数组遍历的固定结构
}

数组中新增元素

// 格式:数组名[下标/索引] = 值;
// 如果下标有对应的值,会把原来的值覆盖,如果下标不存在,会给数组新增一个元素。
var arr = ['red', 'blue', 'pink', 'black'];
arr[0] = 'yellow';
arr[2] = 'purple';
arr[5] = 'skyblue';
console.log(arr); 
// ["yellow", "blue", "purple", "black", empty, "skyblue"]
// length = 6
// empty:空的

数组案例

  1. 求一组数中的所有数的和和平均值
  2. 求一组数中的最大值和最小值,以及所在位置
  3. 将字符串数组用|或其他符号分割
  4. 要求将数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组
  5. 翻转数组
  6. 冒泡排序,从小到大
// 案例1 求一组数中的所有数的和和平均值
var arr = [2, 3, 5, 5, 9, 8, 20, 60, 84];
var sum = 0;
var ave;
for (var i = 0; i < arr.length; i++) {
	sum += arr[i];
}
ave = sum / arr.length
console.log('这组数据的和等于' + sum)
console.log('这组数据的平均数等于' + ave)

// 案例2 求一组数中的最大值和最小值,以及所在位置
var arr = [2, 3, 5, 5, 1, 8, 99, 60, 84];
var max = arr[0];
var min = arr[0];
var maxIndex = 0;
var minIndex = 0;
for (var i = 1; i < arr.length; i++) {
	if (max < arr[i]) {
		max = arr[i];
		maxIndex = i;
	};
	if (min > arr[i]) {
		min = arr[i];
		minIndex = i;
	}
} 
console.log(max);
console.log(maxIndex);
console.log(min);
console.log(minIndex);

// 案例3 将字符串数组用|或其他符号分割
var names = ['郭靖', '黄蓉', '杨过', '黄老邪', '段誉'];
var separator = '&';
var str = names[0];
console.log(names.length)
for (var i = 1; i < names.length; i++) {
	str += separator + names[i];
}
console.log(str);

// 案例4 要求将数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组
var numbers = [0, 5, 0, 8, 6, 52, 0, 85, 54, 0, 64];
var newarray = [];
for (var i = 0 ; i < numbers.length; i++) {
	if (numbers[i] !== 0) {
		newarray[newarray.length] = numbers[i];
	}
}
console.log(newarray);

// 案例5 翻转数组
var numbers = [0, 5, 0, 8, 6, 52, 0, 85, 54, 0, 64]; 
var newnumbers = [];
for (var i = numbers.length - 1; i > 0; i--) {
	newnumbers[newnumbers.length] = numbers[i];
}
console.log(newnumbers);

// 案例6 冒泡排序,从小到大
var numbers = [8, 5, 9, 8, 6, 52, 100, 85, 54, 154, 64]; 
for (var i = 0; i < numbers.length - 1; i++) {
	for (var j = 0; j < numbers.length - 1 - i; j++) {
		if (numbers[j] > numbers[j + 1]) {
			var tmp = numbers[j];
			numbers[j] = numbers[j + 1];
			numbers[j + 1] = tmp;
		}

	}
}
console.log(numbers)

// 案例6优化 冒泡排序,从小到大
var numbers = [8, 5, 9, 8, 6, 52, 100, 85, 54, 154, 64]; 
var coun = 0;
for (var i = 0; i < numbers.length - 1; i++) {
	coun++;
	var isok = true;
	for (var j = 0; j < numbers.length - 1 - i; j++) {
		coun++;
		if (numbers[j] > numbers[j + 1]) {
			isok = false; 
			var tmp = numbers[j];
			numbers[j] = numbers[j + 1];
			numbers[j + 1] = tmp;
		}
	}
	if (isok == true) {
		break;
	}
}
console.log(numbers);
console.log(coun);