day-05数组
1. 数组的定义和使用
1. 数组的定义
- 方式一:
new Array(参数,参数,...): 只有一个数字参数时是数组的长度(new可以省略,但一般尽量写上)
例如:
var arr = new Array(); //定义一个空数组
var arr = new Array(10); //创建一个包含 10 个元素的数组,没有赋值
var arr = new Array(“芙蓉姐姐”,30); //创建一个数组有两个元素
```
- 方式二:
var arr = [1,2,3,4,5]; //字面量定义方式
2. 判断数组类型
Array.isArray();
3. 数组元素的获取(访问)
arr[0]: 表示数组的第一个元素,0是下标,也叫索引
arr[1]: 表示数组的第二个元素,1是下标
4. 数组的长度
数组长度(数组元素的个数) : arr.length
length属性, 不仅是只读的,也可以设置数组的长度,数组已经发生了变化、如果再把数组的长度改回来、数组里的成员其实已经丢失
修改了
例如:
var colors = new Array("red", "blue", "green");
colors.length=2;
console.log(colors[2]);
数组的下标从0开始, 所以数组的最后一个元素的下标为: arr.length – 1
注意: 下标可以是变量或表达式
5. 数组中元素类型
数组的中的元素可以是任意类型
6. 数组的下标
- 数组下标从0开始
var arr=[1,2,3,4,5,6];
数组下标 0 1 2 3 4 5
- 数组的下标、特殊处理
- 数组的下标可以是任意类型、只是在for循环的时候、不会被遍历到;
- for循环的下标、只能是数值类型;
- for-in可以打印所有
7. 数组的遍历for以及for—in
- for
- for循环是根据length的长度、决定遍历的次数
- for-in
- for-in 是根据数组里真实成员的个数、决定遍历的次数
8. 数组的方法
- push()往数组最后位置添加成员、返回数组新长度
- pop()删除数组的最后一位、并返回被删除的元素
- shift():删除数组的第一位、返回被删除元素
- unshift():往数组的第一个位置添加元素、并返回数组新长度
- sort():排序
- reverse():倒序
- concat():合并(不会影响原来的数组)、拷贝
- slice():截取(不会影响原来的数组)
- splice():
- join():
// 1:push()往数组最后位置添加成员、返回数组新长度
var arr=[1,2,3];
console.log(arr.push("余文乐","uu"));
console.log(arr)
//结果:5
// [1, 2, 3, "余文乐", "uu"]
//2: pop()删除数组的最后一位、并返回被删除的元素
var arr=[1,2,3];
console.log(arr.pop());
console.log(arr)
//结果:3
// [1, 2]
//3: shift():删除数组的第一位、返回被删除元素
var arr=[1,2,3];
console.log(arr.shift());
console.log(arr)
//结果:1
// [2, 3]
//4: unshift():往数组的第一个位置添加元素、并返回数组新长度
var arr=[1,2,3];
console.log(arr.unshift("彭于晏","uu"));
console.log(arr)
//结果:5
//(5) ["彭于晏", "uu", 1, 2, 3]
//5: sort()排序
var arr3 = [1, 2, 3, 6, 5, 4];
arr3.sort(function (a, b) {
return a - b; //升序 sort底层两两比较
});
console.log(arr3);
arr3.sort(function (a, b) {
return b - a; //降序
});
console.log(arr3);
//6: reverse():倒序
//7: concat():合并 拷贝
//合并
var arr=[1,2,3];
var arrCopy=[4,5,6];
var arr3=arr.concat(arrCopy);
console.log(arr3);
//快速拷贝
var arr = [1, 2, 3, 4, "陈冠希"];
var arrCopy = arr.concat([]);
console.log(arrCopy);
//循环拷贝
var arr = [1, 2, 3, 4, "陈冠希"];
for (var i = 0; i < arr.length; i++) {
arrCopy[i] = arr[i];
}
console.log(arrCopy);
//8: slice():截取 通过下标截取
var arr=[1,2,3,4,5,6,7];
//下标 0 1 2 3 4 5 6
console.log(arr.slice(1,4)) //结束位置要多写一位、获取到参数2,3,4
//9: splice():
//2个参数 删除(开始位置,个数)
//3个参数、第二个参数为0、为插入(开始位置、0、插入的内容)
//3个参数、第二个参数为1、为替换(开始位置、1(替换几位)、替换的内容)
//10: join() 结合 默认返回带有“,”的字符串、也可以指定格式/如果是空字符串、就会返回一段字符串
9. 数组三大排序
- 冒泡排序
冒泡排序原理
//冒泡排序
//外层循环-1
//内层循环-1由-i
//内循环相邻比较大小
//邻里交换位置
var arr=[5,1,8,4,2,3,6,7];
for(var i=0;i<arr.length-1;i++){ //外层循环-1
for(var j=0;j<arr.length-1-i;j++){ //内层循环-1又-I
if(arr[j]>arr[j+1]){ //内循环相邻比较大小
var temp=arr[j+1 ]; //邻里交换位置
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
console.log(arr);
- 选择排序
var list = [8, 4, 5, 20, 2, 7, 3, 6];
function selectSort(arr) {
for (var i = 0; i < arr.length; i++) {
//先自定义一个最小值
var minNum = I;
for (var j = i + 1; j < arr.length; j++) {
//获取真正的最小值
if (arr[j] < arr[minNum]) {
minNum = j;
}
}
//交换位置
[arr[i], arr[minNum]] = [arr[minNum], arr[i]]
console.log(arr[i]);
}
}
selectSort(list);
console.log(list);
- 快速排序
var arr1 = [1, 9, 6, 3, 4, 8, 2];
function quickSort(arr) {
//该方法只适用于数组长度大于1位的数组
if (arr.length <= 1) {
return arr;
}
//获取最中间数下标
var centerIndex = parseInt((arr.length / 2));
//通过下标得到数值
var centerNub = arr.splice(centerIndex, 1);
//定义两个空的数组,
var left = [], right = [];
//循环,大于中间数放在左边的数组中,小于或等于则放在右边的数组中
for (var i = 0; i < arr.length; i++) {
if (arr[i] > centerNub) {
left.push(arr[I])
} else {
right.push(arr[I])
}
}
//返回并拼接数组
return quickSort(left).concat(centerNub, quickSort(right));
}
console.log(quickSort(arr1));