数组

一、数组的定义和概念

<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>
View Code

二、数组的操作

 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]);
View Code

三、数组的遍历

  var arr = ["关羽","张飞","赵云","马超","黄忠"];

    //遍历数组就是循环(获取)数组中的每一项
    for(var i=0;i<arr.length;i++){
        //代表的是数组中的每一个元素;
//        arr[i]
        console.log(arr[i]);
    }
View Code

四、数组案例

  //把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);
View Code

五、冒泡排序

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);
View Code

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);
View Code

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);
View Code
原文地址:https://www.cnblogs.com/knighterrant/p/9428020.html