1:什么是数组
数据的组合,一组数据
当需要操作多个数据时,可以给数据打包,叫做数组
数组其实也是对象,只是储存数据的形式不一样,但是类型一样
2:如何得到数组
字面量:var r1 = [];
构造函数:var r2 = new Array();
区别:当字面量内只有一个数值型数据时,表示一个数据。
当构造函数内只有一个数值型数据时,表示长度
注意区别,按需选择
3:数组的操作
索引(编号、序号:从0开始)
Var arr = [“asd”,”qwe”,3,2,8];
数组是一个有序数据的集合 ,有序的序号叫索引,从0开始,根据长度得出到length-1结束。
数组的第一个:数组[0]
数组的最后一个:数组[length-1]
**(1)增:**增加数组的长度,给不存在的位置赋值:
Arr[arr.length] = “lalal”;
**(2)删:**缩短数组的长度:arr.length=3;(比如原来的长度是5)
**(3)改:**找到对应索引的数据,赋值:
Arr[要修改数据的索引] = “asd”;
(4)查: 根据索引直接获取:arr[指定位置的索引]
4;数组的小分类
对象数组:里面都是对象
字符数组:都是字符
对象数组(json数组):都是对象
数组数组(二维数组):都是数组
如何使用:逐层解析
如:json数组:
var objArr = [{name:“admin”},{name:“root”},{name:“liyang”}];
// 指定数据
console.log(objArr[1].name); // root
// 所有数据
for(var i=0;i<objArr.length;i++){
console.log(objArr[i].name);
}
二维数组:
var twoArr = [[3,5,6,7,4],[“a”,true,“b”],[“hello”,“world”]];
// 指定数据
// console.log(twoArr[2][0]);
// 所有数据
for(var i=0;i<twoArr.length;i++){
// console.log(twoArr[i])
for(var j=0;j<twoArr[i].length;j++){
console.log(twoArr[i][j]);
}
}
5:数组的排序
冒泡排序
// 简单的排序
var arr = [9,8,7,6,5];
console.log(arr);
// 不用sort
// 自己写
// 升序
// 接下来我表示的是索引(下标)
// 0-1,1-2,2-3,3-4
// [8,7,6,5,9]
// // 比完之后,排了什么,排了最后一个必然是最大值
// 0-1,1-2,2-3
// [7,6,5,8,9]
// // 比完之后,排了什么,排了倒数第二个必然是倒数第二大的值
// 0-1,1-2
// [6,5,7,8,9]
// // 比完之后,排了什么,排了倒数第三个必然是倒数第三大的值
// 0-1
// [5,6,7,8,9]
// // 比完之后,排了什么,排了倒数第四个必然是倒数第四大的值
// 以下结构是比较次数和哪些索引进行比较
// 0-1,1-2,2-3,3-4
// 0-1,1-2,2-3
// 0-1,1-2
// 0-1
// 多行多列
// 循环的嵌套
// 外层循环控制行
// 内层循环控制列
for(var i=0;i<arr.length-1;i++){
for(var j=0; j<arr.length-1-i; j++){
if(arr[j] > arr[j+1]){
var ls = arr[j];
arr[j] = arr[j+1];
arr[j+1] = ls;
}
}
}
// 两两比较,大的放后面:冒泡排序
console.log(arr);
选择排序
var arr = [9,8,5,6,7];
console.log(arr);
// // 思路:拿第一位和后面所有作比较,找到最小的,放在第一位
// 0-1,0-2,0-3,0-4
// [5,8,9,6,7]
// // 第一轮结束后,第一个位置必然是最小的
// // 思路:拿第二位和后面所有作比较,找到最小的,放在第二位
// 1-2,1-3,1-4
// [5,6,9,8,7]
// // 第二轮结束后,第二个位置必然是第二小的
// // 思路:拿第三位和后面所有作比较,找到最小的,放在第三位
// 2-3,2-4
// [5,6,7,8,9]
// // 第三轮结束后,第三个位置必然是第三小的
// // 思路:拿第四位和后面所有作比较,找到最小的,放在第四位
// 3-4
// [5,6,7,8,9]
// // 第四轮结束后,第四个位置必然是第四小的
// 一共有5个数据,确定了前四个,最后一个不需要比了
// 以下结构是:比较次数和哪些索引在比较
// 0-1,0-2,0-3,0-4
// 1-2,1-3,1-4
// 2-3,2-4
// 3-4
for(var i=0;i<arr.length-1;i++){
// 为了能不断的使用第一位和后面的作比较,在能拿到第一个数据的时候,存到一个ls变量中
// 将来使用这个ls变量作比较,就不影响真正的第一位的数据了
// 因为每一行第一个索引都在变,所以,要将这个ls变量,放在第一个循环的内部
var ls = arr[i];
// ls保存了数组中某个数据,lsIndex保存这个数据的索引
var lsIndex = i;
for(var j=i+1;j<arr.length;j++){
if(ls > arr[j]){
// ls里面的数据如果大了,换成小的
// 因为在找最小的
ls = arr[j];
// 如果ls里面的数据换了,lsIndex也跟着换
lsIndex = j;
}
}
// ls必然已经是最小的了
// 交换数组中的数据
// 先把真正的第一位拿走,否则会被覆盖
// 放到真正的最小值的位置
arr[lsIndex] = arr[i];
// 再把ls变量中,最小的值,放在第一位
arr[i] = ls;
}
// 按照从左到右的顺序,依次取出每个数据,后后面所有数据做比较,找到最小值,交换
// 选择排序
console.log(arr);