【JavaScript】数组和二维数组

目录

一、数组

1. 概念

2. 创建数组

2.1 使用'[]'创建

2.2 使用 'new Array'创建

3. 数组的属性

4. 数组元素的访问

5.示例

6. for...in循环

7. for...of循环

8. forEach循环

二、二维数组

1. 概念

2. 二维数组的创建

2.1 使用'[]'

2.2 使用'new Array'

3. 二维数组元素的访问

4. 例题


一、数组

1. 概念

数组是类型相同的数据的集合。

2. 创建数组

2.1 使用'[]'创建

var 变量名 = [];                //可以创建空数组

var 变量名 = [1,2,3,4];        //创建一个有数据的数组

2.2 使用 'new Array'创建

var  变量名 = new Array();        //创建一个空数组

var arr4 = new Array(1, 2, 3, 4);        //创建一个有数据的数组

        // 2.创建数组
        var arr1 = []; //创建一个空数组
        var arr2 = [1, 2, 3, 4, 5]; //创建一个有数据的数组

        var arr3 = new Array(); //创建一个空数组
        var arr4 = new Array(1, 2, 3, 4); //创建一个有数据的数组

3. 数组的属性

length:数组默认属性,表示数组的长度。

        // 3.数组的length属性
        console.log(arr3.length)
        console.log(arr4.length)

4. 数组元素的访问

数组名[index]    

'index'的取值在0~length-1。

        // 4.数组元素的访问
        console.log(arr4);

        for (var i = 0; i < arr4.length; i++) {
            console.log(arr4[i]);
        }

5.示例

案例:找出一个数组的最大值

        var arr = [45, 12, 35, 78, 99, 466, 231];

        var max = arr[0]; //假定数组的第一个数是最大值

        for (var i = 1; i < arr.length; i++) {
            if (max < arr[i]) {     //把数组之后的每一个数跟MAX数比较
                max = arr[i];   //更新MAX值
            }
        }
        console.log("Max:", max);
        console.log("原数组:", arr);

 案例:反转数组中的元素

        var arr = [45, 12, 35, 78, 99, 466, 231];

        // 错误代码:交换到一半其实就换完了,继续交换下一半又会换回去
        // for (var i = 0; i < arr.length; i++) {
        //     var temp = arr[i];
        //     arr[i] = arr[arr.length - i - 1];
        //     arr[arr.length - i - 1] = temp;
        // }
        // console.log("交换后:", arr);   //输出:[45, 12, 35, 78, 99, 466, 231]

        // 正确代码:方法一
        for (var i = 0; i < parseInt(arr.length / 2); i++) {
            var temp = arr[i];
            arr[i] = arr[arr.length - i - 1];
            arr[arr.length - i - 1] = temp;
        }
        console.log("交换后:", arr);   //输出:[45, 12, 35, 78, 99, 466, 231]

        // 正确代码:方法二
        var i = 0;
        var j = arr.length - 1;
        while (i < j) {
            var temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++;
            j--;
        }
        console.log("交换后:", arr);   //输出:[45, 12, 35, 78, 99, 466, 231]

案例:已知数组(12,23,26,45,58,60)是有序的,输入一个数X,将他插入到数组中,保证数组仍然是有序的 

        // 题目:已知数组(12,23,26,45,58,60)是有序的,输入一个数X,将他插入到数组中,保证数组仍然是有序的
        var arr=[12,23,26,45,58,60,null]
        var num=parseInt(prompt('请输入一个整数'))
        var index=0 //插入位置的索引

        //1.遍历数组,寻找插入的位置
        for(var i=0;i<arr.length;i++){
            if(arr[i]>num){
                index = i;
                break
            }
        }
        //2.将插入位置以后的元素依次向后移动
        for(var j=arr.length-1;j>index;j--){
            arr[j]=arr[j-1]
        }
        //3.将元素放入相应的位置
        arr[index] = num

        console.log(arr)

 

6. for...in循环

专门用来遍历数组或集合的。

变量中存放的数组或集合的索引

for(var 变量  in  数组名或集合名)        //变量中存放的数组或集合的索引
{
        数组名[变量]
}

        var arr = [45, 12, 35, 78, 99, 466, 231];

        for(var k in arr){
            console.log(k);    //输出索引:0,1,2,3,4,5,6
        }

        for(var k in arr){
            console.log(arr[k]);    //输出元素:45, 12, 35, 78, 99, 466, 231
        }

7. for...of循环

专门遍历数组和集合。

变量中存放的是数组或集合中的元素

遍历数组和集合的效率最高,但是无法遍历对象。

for(var 变量 of 数组名或集合名)        //变量中存放的是数组或集合中的元素
{
        console.log(变量);
}

        var arr = [45, 12, 35, 78, 99, 466, 231];

        for (var k of arr) {
            console.log(k);    //输出元素:45, 12, 35, 78, 99, 466, 231
        }

8. forEach循环

函数中不能有return和break语句。

arr.forEach(function(k)        //依次从数组中取出元素放在k中,然后将k作为参数传递给函数
{

         console.log(k);
})

        var arr = [45, 12, 35, 78, 99, 466, 231];
        arr.forEach(function (k) {
            console.log(k);    //输出元素:45, 12, 35, 78, 99, 466, 231
        })

二、二维数组

1. 概念

二维数组指一个数组元素带有两个下标(有行有列)

2. 二维数组的创建

2.1 使用'[]'

var arr = [[1,2,3],[4,5,6],[7,8,9]];        //3行3列的二维数组

2.2 使用'new Array'

var a = new Array(
        new Array(10,20,30),
        new Array(11,22,33),
        new Array(45,56,67)
)

        var arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] //3行3列的二维数组

        var a = new Array(
            new Array(10, 20, 30),
            new Array(11, 22, 33),
            new Array(45, 56, 67)
        )

        // 转换成字符串输出
        var str = ''
        for (var i = 0; i < a.length; i++) { //外循环:a.length表示二维数组的行数
            for (var j = 0; j < a[i].length; j++) { //内循环:a[i].length表示i行的元素个数(列数)
                str += a[i][j] + '\t'
            }
            str += '\n'; //在每行的末尾添加换行符
        }
 
        console.log(str);

3. 二维数组元素的访问

数组名[行下标][列下标]        //按行优先访问,默认按行优先

数组名[列下标][行下标]        //按列优先访问

4. 例题

案例:二维数组的转置

分析:行变成列,列变成行。

注意:行列相同的二维数组(矩阵)和行列不同的二维数组转置的区别。

        var a = [
            ['a', 'b', 'c'],
            ['d', 'e', 'f'],
            ['g', 'h', 'i'],
            ['i', 'k', 'I']
        ]
        var str = ''
        for (var i = 0; i < a.length; i++) {
            for (var j = 0; j < a[i].length; j++) {
                str += a[i][j] + '\t';
            }
            str += '\n';
        }
        console.log("转置前:\n", str);

        var res = []    //临时用于转置的数组

        for (var i = 0; i < a[0].length; i++) {    //外循环:变量i是a数组的列下标,也是res数组的行下标
            res[i] = []
            for (var j = 0; j < a.length; j++) {    //内循环:变量j是a数组的行下标,也是res数组的列下标
                res[i][j] = a[j][i];
            }
        }
        console.log("转置后:", res);

案例:求3*4的二维数组的所有元素之和

        var arr=[
            [12,25,4,59],
            [11,33,41,26],
            [22,87,5,17]
        ]
        console.log(arr)
        

        // 所有元素之和
        var sum = 0;   
        for(var i=0;i<arr[0].length;i++){ //外循环:表示行下标 
            for(var j=0;j<arr.length;j++){ //内循环:表示列下标
                sum += arr[j][i]
            }
        }
        console.log(sum)

案例:求3*4的二维数组的每行元素之和

        var arr=[
            [12,25,4,59],
            [11,33,41,26],
            [22,87,5,17]
        ]
        console.log(arr)

        // 每行元素之和
        for(var i=0;i<arr.length;i++){ //外循环:表示行下标
            var sum = 0;    
            for(var j=0;j<arr[i].length;j++){ //内循环:表示列下标
                sum += arr[i][j]
            }
            console.log('第'+(i+1)+'行元素之和= ',sum)
        }

案例: 求3*4的二维数组的每列元素之和

        var arr=[
            [12,25,4,59],
            [11,33,41,26],
            [22,87,5,17]
        ]
        console.log(arr)

        // 每列元素之和
        // arr[0].length:第一行的长度,4
        for(var i=0;i<arr[0].length;i++){ //外循环:表示列下标
            var sum = 0;  
            //arr.length:行数,3行
            for(var j=0;j<arr.length;j++){ //内循环:表示行下标
                sum += arr[j][i]    //[0][0],[1][0],[2][0];[0][1],[1][1],[2][1];[0][2],[1][2],[2][2]
            }
            console.log('第'+(i+1)+'列元素之和= ',sum)
        }

 案例:求3*3的二维数组的对角线元素之和

        var a=[
            [1,2,3],
            [4,5,6],
            [7,8,9]
        ]
        var s1=0,s2=0;
        for(var i=0;i<a.length;i++){
            s1 += a[i][i];
            s2 += a[i][a.length-i-1]
        }
        console.log('左上-右下对角线元素之和=',s1)
        console.log('左下-右上对角线元素之和=',s2)

案例:输出杨辉三角

        // 定义二维数组
        var info=new Array(7) //创建一个数组,有7个单元
        for(var i=0;i<info.length;i++){
            info[i] = new Array(7) //在数组的每个单元里,再创建一个7单元的数组,构成二维数组
        }
        //1.对二维数组进行初始化:第一列和对角线元素全部置为1
        for(var j=0;j<info.length;j++){
            info[j][j] = 1; //对角线元素为1
            info[j][0] = 1; //第一列元素为1
        }
        //2.对二维数组正对角线左边的元素进行运算
        for(var i=2;i<info.length;i++){ //外循环:行下标
            for(var j=1;j<i;j++){ //列下标
                info[i][j]= info[i-1][j-1]+info[i-1][j]
            }
        }
        //3.输出二维数组
        var str=''
        for(var i=0;i<info.length;i++){
            for(var j=0;j<=i;j++){
                str +=info[i][j]+'\t'
            }
            str += '\n'
        }
        console.log(str)

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值