一、数组的定义和概念
<script> //定义1(字面量定义) var array1 = [1,2,3]; var array2 = []; console.log(typeof array1); console.log(array1); //定义2(对象创建) var arr1 = new Array(); //空数组 var arr2 = new Array("关羽","张飞","刘备"); var arr3 = new Array(1,2,3); var arr3 = new Array(3); console.log(arr1); console.log(arr2); console.log(arr3); </script>
二、数组的操作
var arr = ["刘备","关羽","张飞"]; //数组长度 // console.log(arr); // console.log(arr.length); //通过索引值获取元素。 console.log(arr[0]); console.log(arr[1]); console.log(arr[2]); console.log(arr[1222]); //通过索引值,给元素赋值 arr[0] = "韩信"; arr[1] = "萧何"; arr[2] = "张良"; console.log(arr[0]); console.log(arr[1]); console.log(arr[2]);
三、数组的遍历
var arr = ["关羽","张飞","赵云","马超","黄忠"]; //遍历数组就是循环(获取)数组中的每一项 for(var i=0;i<arr.length;i++){ //代表的是数组中的每一个元素; // arr[i] console.log(arr[i]); }
四、数组案例
//把1-10之间所有的奇数,放到数组中 //有问题,索引值不是挨着的,而且不是从0开始。 // var arr1 = []; // // for(var i=1;i<=10;i++){ // if(i%2!==0){ // arr1[i] = i; // } // } // // console.log(arr1); //重新定义变量作为数组的索引值使用 // var arr1 = []; // var j = 0; // for(var i=1;i<=10;i++){ // if(i%2!==0){ // arr1[j] = i; // j++; // } // } // console.log(arr1); //数组长度本身开始的时候是0,紧接着每添加进去一个值,数组长度自增1; //新的变量j可以用,arr.length替代,因为初始化值也是0,每添加一个元素也是自增1. var arr = []; for(var i=1;i<=10;i++){ if(i%2!==0){ arr[arr.length] = i; } } console.log(arr); //1-10之间能被3整数的数字,存到数组中 //数组的长度刚好可以作为数组中下一个元素的索引值。 var arr2 = []; for(var i=1;i<=10;i++){ if(i%3===0){ arr2[arr2.length] = i; } } console.log(arr2); #数组大案例 //一、求一组数中的所有数的和和平均值 // var arr = [10,20,30]; // //计数器思想 // var sum = 0; // for(var i=0;i<arr.length;i++){ // sum += arr[i]; // } // console.log(sum); // var avg = sum/arr.length; // console.log(avg); //二、求一组数中的最大值和最小值,以及所在位置 //预热案例:求最大值 // var arr = [-10,20,-30,0]; // //必须使用数组中的值。(最好是第一个或者最后一个,可以少比较一次) //// var max = 0; // var max = arr[0]; // for(var i=1;i<arr.length;i++){ // //遍历数组,判断数组中的每一项,如果比max大,赋值给max,否则不用管 // if(arr[i]>max){ // max = arr[i]; // } // } // alert(max); // var arr = [10,-20,30,40]; // //定义一个最大值和一个最小值,把他们的索引值赋值给固定的两个变量 // var maxValue = arr[0]; // var minValue = arr[0]; // var maxIndex = 0; // var minIndex = 0; // // for(var i=1;i<arr.length;i++){ // //如果数组中的元素大于我们定义的最大值 // if(arr[i]>maxValue) { // //把这个元素赋值给最大值,把他对应的索引值,赋值给maxIndex // maxValue = arr[i]; // maxIndex = i; // } // //如果数组中的元素小于我们定义的最小值 // if(arr[i]<minValue){ // //把这个元素赋值给最小值,把他对应的索引值,minIndex // minValue = arr[i]; // minIndex = i; // } // } // console.log(maxValue); // console.log(maxIndex); // console.log(minValue); // console.log(minIndex); //三、将字符串数组用|或其他符号分割 // var arr = ["吕超","赵云","典韦","关羽","马超","张飞"]; // var str = arr[0]; // var separator = "|"; // //为了避免第一个名字前有|,把第一个名字从数组中取出,赋值给str,然后在链接其他名字。 // for(var i=1;i<arr.length;i++){ // str += separator+ arr[i]; // } // console.log(str); //四、将数组中值为0的去掉,不为0的存入一个新数组 // var arr = [0,"刘备",0,"关羽",0,"张飞",0]; // var newArr = []; // for(var i=0;i<arr.length;i++){ // //判断,如果不是0,放入新数组 // if(arr[i] !== 0){ // newArr[newArr.length] = arr[i]; // } // } // console.log(newArr); //五、翻转数组 //思路:实现方法:1.定义一个新数组,把老数组中的元素从后往前添加到新数组中。 //思路:实现方法:1.操作原数组,让原数组第一位和最后一个位调换位置,以此类推。 var arr = ["刘备","关羽","张飞","诸葛亮","马超","黄忠","姜维"]; console.log(arr); //思路:实现方法:1.定义一个新数组,把老数组中的元素从后往前添加到新数组中。 // var newArr = []; //复杂版 // for(var i=0;i<arr.length;i++){ // //用新数组的长度作为索引值。 给定数组的最大索引值,然后-去i,因为i自增所以,获取的将是最大索引值到0; // newArr[newArr.length] = arr[arr.length-1-i]; // } // console.log(newArr); //简单版 // for(var i=arr.length-1;i>=0;i--){ // //用新数组的长度作为索引值。 给定数组的最大索引值,然后-去i,因为i自增所以,获取的将是最大索引值到0; // newArr[newArr.length] = arr[i]; // } // console.log(newArr); //思路:实现方法:1.操作原数组,让原数组第一位和最后一个位调换位置,以此类推。 for(var i=0;i<arr.length/2;i++){ //让前后数组中的元素交换位置。 var temp = arr[i]; //前面项和对应的后面项交换位置。(arr.length-1-i = 倒数第i+1项) arr[i] = arr[arr.length-1-i]; arr[arr.length-1-i] = temp; } console.log(arr);
五、冒泡排序
1.简单版
#冒泡排序简单版 var arr = [7,6,5,4,3,2,1]; //需求:冒泡排序。 //理论:1.比较轮数n-1。 2.比较次数n-1。 3.符合某个条件交换位置。 //核心:双重for循环。 //步骤: //1.双重for循环。 //2.指定轮数和次数 //3.判断是否符合标准。如果符合标准交换位置。 console.log(arr); //1.双重for循环。(外循环控制轮数) for(var i=0;i<arr.length-1;i++){ //2.指定轮数和次数(内循环控制次数) for(var j=0;j<arr.length-1;j++){ //3.判断是否符合标准。如果符合标准交换位置。 //从小到大排列顺滑,如果前面的比后面的大,那么交换位置。 if(arr[j] > arr[j+1]){ var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } console.log(arr);
2.中级版
var arr = [7,6,5,4,3,2,1]; //需求:冒泡排序。 //理论:1.比较轮数n-1。 2.比较次数n-1。 3.符合某个条件交换位置。 //核心:双重for循环。 //步骤: //1.双重for循环。 //2.指定轮数和次数 //3.判断是否符合标准。如果符合标准交换位置。 console.log(arr); //每轮比较少比较一次。(每一轮都会比较出一个最大值,然后后一轮没有必要再比较了,所以没比较一轮,就少比较一次。。。) var m = 0; var n = 0; //1.双重for循环。(外循环控制轮数) for(var i=0;i<arr.length-1;i++){ //2.指定轮数和次数(内循环控制次数) for(var j=0;j<arr.length-1-i;j++){ //3.判断是否符合标准。如果符合标准交换位置。 //从小到大排列顺滑,如果前面的比后面的大,那么交换位置。 if(arr[j] > arr[j+1]){ var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } m++; } n++; } console.log(arr); console.log(m); console.log(n);
3.终极版
// var arr = [7,6,5,4,3,2,1]; var arr = [1, 2, 3, 4, 5, 6, 7]; //需求:冒泡排序。 //理论:1.比较轮数n-1。 2.比较次数n-1。 3.符合某个条件交换位置。 //核心:双重for循环。 //步骤: //1.双重for循环。 //2.指定轮数和次数 //3.判断是否符合标准。如果符合标准交换位置。 console.log(arr); //如果比较完备提前结束比较。(判断,如果本次比较没有移动任何元素,那么说明已经比较完成) var m = 0; var n = 0; //1.双重for循环。(外循环控制轮数) for(var i=0;i<arr.length-1;i++){ //开闭原则。(写在第一个for循环里,是为了,每轮比较初始化bool变量变为true。) var bool = true; //2.指定轮数和次数(内循环控制次数) for(var j=0;j<arr.length-1-i;j++){ //3.判断是否符合标准。如果符合标准交换位置。 //从小到大排列顺滑,如果前面的比后面的大,那么交换位置。 if(arr[j] > arr[j+1]){ var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; bool = false; } m++; } n++; //bool这个变量默认值为true;如果本轮比较有一对元素相互交换位置,那么也不能跳出循环。 //但是,如果本轮比较没有任何元素相互交换位置,那么说明已经比较完成,可以跳出循环。 if(bool){ break; } } console.log(arr); console.log(m); console.log(n);