JavaScript基础
数组
- 是什么
数组是指一组数据的集合,其中的每一个数据被称作元素,在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变量名下的优雅方式
- 创建数组的两种方式
// 利用new创建数组
var arr = new Array()
// 利用数组字面量创建数组
var arr1 = []
- 上面的两种方法都是创建了一个空数组
// 为数组赋值
arr[1] = '元素1'
arr[2] = '元素2'
arr[3] = '元素3'
arr1[1] = '元素1'
arr1[2] = '元素2'
arr1[3] = '元素3'
- 以上的方法都太麻烦了,下面的方法是比较常用的,创建的同时赋值
var arr2 = ['元素1','元素2','元素3']
- 访问数组
// 数组的索引(下标):用来访问数组元素的序号,从0开始
var arr = ['元素1', '元素2', '元素3']
console.log(arr[0]) //元素1
console.log(arr[1]) //元素2
console.log(arr[2]) //元素3
console.log(arr[3]) //undefined, 因为没有这个数组元素
// for循环遍历数组
for (var i = 0; i < arr.length; i++) { //arr.length数组的长度
console.log(arr[i])
}
- 新增数组元素
// 修改数组length
var arr = [1, 2, 3]
arr.length = 5
console.log(arr) //[1, 2, 3, empty × 2],因为最后新增的两个长度是没有元素的所以显示的是empty
// 新增数组元素
var arr1 = [1, 2, 3]
arr1[3] = '新增1'
arr1[4] = '新增2'
console.log(arr1) //[1, 2, 3,'新增1', '新增2']
- 案例(1)
// 求数组里面所以元素相加的和,以及平均值
var arr = [10, 2, 3, 4, 60, 90];
var sun = 0; //和的初始值
var appraise; //保持平均值的变量
for (var i = 0; i < arr.length; i++) {
sun += arr[i]
}
appraise = sun / arr.length
console.log(sun) //169
console.log(appraise); //28.166666666666668
// 求一组数据中的最大值
var arr1 = [10, 2, 1, 0, 100, 30, 9]
var max = arr1[i]; //假设数组中第一个元素的值最大
for (var i = 1; i < arr1.length; i++) { //因为已经假设第一个元素为最大值的,所以遍历的初始索引可以从1开始
if (arr[i] > max) {
//如果还有元素比假设的最大值还大,那么该元素就是新的假设的最大值
max = arr1[i]
}
}
console.log(max); //100
- 案例(2)
// 把数组中大于10的元素选出来放到新的数组中
var arr = [1, 20, 31, 9, 5, 2, 10, 32, 11]
var newArr = []; //创建一个新的数组用来存放大于10的元素
for (var i = 0; i < arr.length; i++) {
//对每一个元素继续判断
if (arr[i] > 10) {
// 用newArr.length作为新数组的下标,没新增一个元素,newArr.length都会加1,所以刚好是我们想要的
newArr[newArr.length] = arr[i]
}
}
console.log(newArr); // [20, 31, 32, 11]
// 翻转数组 [2,3,4,5]=>[5,4,3,2]
var arr = [2, 3, 4, 5]
var newArr = []
for (var i = arr.length - 1; i >= 0; i--) { //我们可以从数组的最后一个开始拿,每次都往新数组里面放
newArr[newArr.length] = arr[i]
}
console.log(newArr); //[5, 4, 3, 2]
- 案例(3)
// 数组冒泡排序(从小到大排序)
var arr = [2, 131, 123, 1, 3, 0]
// 分析:
/*
1. 每一个元素都和其他元素比较一次(不重复比较) 得:
2->131,2->123,2->1,2->3,2->0 第一轮比较了5次
131->123,131->1,131->3,131->0 第二轮比较了4次
123->1,123->3,123->0 第三轮比较了3次
1->3,1->0 第二轮比较了2次
3->0 第四轮比较了1次
再得:
外层循环为比较的轮数,为arr.lenght-1
内循环为没一轮比较的次数,每次都会递减1,所以有以下代码
*/
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
let tep = null
if (arr[j] > arr[j + 1]) {
// 因为我们是从小到大排序,所以如果前面的元素比后面的元素要大,那么就交换他们两的位置
tep = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = tep
}
}
}
console.log(arr)