JavaScript二维数组的常用方法及排序

多维数组:

  • 多维数组实际上就是数组的数组,指数组的每一元素也是一个数组;
  • JavaScript中的二维数组的列的长度可以不唯一;
  • 二维数组的创建:
		//创建已知的二维数组
        var multiArr=[[1,2,3,4],[5,6,7],[8,9]];
        //创建一个4行6列的二维数组
        var muArr = new Array(4);
        for(var i = 0;i <4;i++) {
            muArr[i] = new Array(6);//申明二维,每一个一维数组里面的一个元素都是一个数组
        }
  • 二维数组的读写:
    二维数组的读写用数组名[][]的方式,第一个中括号内为行数,从0计数,第二个中括号内为列数,也从0计数;
		var multiArr=[[1,2,3,4],[5,6,7],[8,9]];
		for(var i=0;i<multiArr.length;i++){
            for(var j=0;j<multiArr[i].length;j++){
                document.write(multiArr[i][j]+" ");
            }
            document.write("<br>");//换行
        }
        /*
        	输出:
        	1 2 3 4 
			5 6 7 
			8 9 
        */

数组的常用方法
(1)查找元素的位置

  • 根据值查找元素的位置,有两个方法:indexOf()和lastIndexOf(),都返回第一次遇到该元素时的索引;
  • indexOf()从索引小处往打出搜索,lastIndexOf()相反;
  • 两个方法都有两个参数,第一个参数为要查找的元素,第二个参数可选,为搜索的起点索引;
  • 第二个参数可以是负数,-1表示倒数第一个元素,-2表示倒数第二个元素,依次类推;
		//			  0    1   2   3   4   5   6   7   8   9
		var search = ["a","b","a","b","c","d","a","a","b","a"];
        //从前往后索引
        console.log(search.indexOf("a"));//输出0
        //从后往前索引
        console.log(search.lastIndexOf("a"));//输出9
        console.log(search.indexOf("b",2));//输出3,从索引为2处开始寻找,第一个b在位置3处
        console.log(search.indexOf("a",-1));//输出9,从索引处为8的位置开始寻找,第一个a在位置9处
        console.log(search.lastIndexOf("a",-2));//输出7,从索引处7位置开始寻找,第一个a就在位置7处

(2)数组的合并

  • concat()实现数组合并,其形式是数组a.concat(数组b),合并之后返回新数组,新数组为数组a后面连接数组b,但是数组a和b不变;
		var a = [1,2,3];
        var b = [4,5,6];
        var c = a.concat(b);//合并后返回新数组
        console.log(c);//输出[1,2,3,4,5,6]

(3)数组倒置

  • reverse()实现数组倒置,无参数,返回倒置后的数组,同时调用该方法的数组也会被倒置。称为就地逆置;
		var a = [1,2,3,4];
        var b = a.reverse();
        console.log(a);//输出[4,3,2,1]
        console.log(b);//输出[4,3,2,1]

(4)元素合并

  • join()将数组的所有元素连接起来组成字符串,参数为元素之间的分隔符,没写默认逗号;
		var sArray = ["June","July","August"];
        console.log(sArray.join());//输出June,July,August
        console.log(sArray.join("+"));//输出June+July+August

(5)元素排序

  • sort()实现数据元素排序,不带该参数表示元素按照ASCII表从小到大排序;
  • 带参数的升序排列,格式如下:a,b是两个参数,返回a-b,升序排列;返回b-a,降序排列;
    数组名.sort(function(a,b){
    return a-b; //升序排列
    });
  • 带参数的降序排列,格式如下:
    数组名.sort(function(a,b){
    return b-a; //降序排列
    });
		var stringArray = ["a","ab","b","aa"];
        stringArray.sort();
        console.log(stringArray);//输出["a","aa","ab","b"]
        //对于数字的排序,sort()带参数和不带参数是不一样的
        
		var arr = [1,2,10,5,12];
        arr.sort();
        console.log(arr);//输出[1,10,12,2,5]
        arr.sort(function(a,b){
            return a-b;
        });
        console.log(arr);//输出[1,2,5,10,12]
        arr.sort(function(a,b){
            return b-a;
        });
        console.log(arr);//输出[12,10,5,2,1]

(6)提取子数组

  • slice()返回切割出的子数组,不修改原来的数组;
  • 它有两个整数参数a和b,a表示切割的起点,该点属于子数组;b可选(b可以不写),表示切割的终点,该点不属于子数组;
  • a,b都可以为负数,如-1表示倒数第一个位置;
		console.log(arr.slice(0,3));//["a","b","c"]
        console.log(arr.slice(0,-2));//["a","b","c"]
        console.log(arr.slice(4));//["e"]
        console.log(arr.slice(-4));//["b","c","d","e"]

数组排序
(1)冒泡排序

  • 冒泡排序的外层循环i控制冒泡的次数,为数组长度-1;
  • 内循环j初始值为0,上限为arr.length-i,随着冒泡的进行,越往后需要比较的数组的索引上限越小;
		//冒泡排序
        var arr = [9,5,8,0,2,6];
        var temp;
        var flag = 0;//元素交换的标志位
        for(var i = 1;i <=arr.length-1;i++) {//共进行arr.length-1次冒泡
            flag = 0;
            for(var j = 0;j < arr.length-i;j++) {//一次冒泡
                if(arr[j]>arr[j+1]) {//交换元素
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = 1;
                }
            }
            if(flag == 0)
                break;//本次冒泡没有元素交换
           	}
        console.log(arr);//输出[0, 2, 5, 6, 8, 9]
  • 选择排序
  • 遍历数组,记录下每一趟最大元素的索引值,将最大的元素与每一趟最后一个元素交换位置;
		//选择排序
        var arr = [6,12,3,34,1,56,77,0,2,43];
        var aLength = arr.length;
        var temp;
        var max = arr[0];
        var maxIndex = 0;
        for(var i = 0;i < aLength-1;i++) {//共进行n-1次选择
            for(var j = 1;j < aLength-i;j++) {//一次选择
                if(arr[j] > max) {
                    max = arr[j];
                    maxIndex = j;
                }
             }
            //将本次选出的最大元素移动到最终的位置上
            temp = arr[aLength-i-1];
            arr[aLength-i-1] = arr[maxIndex];
            arr[maxIndex] = temp;
            var max = arr[0];//每一次都将最大值默认为0处
            var maxIndex = 0;//最大索引默认为第0处
        }
        console.log(arr);//输出 [0, 1, 2, 3, 6, 12, 34, 43, 56, 77]

版权声明:本文为weixin_46516925原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。