JavaScript数组及其练习

目录

  • 数组
    • 一维数组
      • 创建数组
      • 访问数组元素
      • 数组元素的操作
    • 二维数组
      • 创建数组
      • 访问数组元素
    • 练习
      • 题1:删除数组中的0
      • 题2:将数组元素倒置
        • 方法一
        • 方法二
        • 方法三
      • 题3:找出一个二维数组中每行元素的最大值
      • 题4:输出数组每行、每列、对角线元素之和
      • 题5:数组转置
      • 题6:数组每行元素降序排列
        • 方法一:冒泡排序
        • 方法二:选择排序

数组

数组是一组类型相同的数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。

一维数组

通过一个下标就可以确定数组元素的位置。

创建数组

  • 使用 new Array( ) 创建数组
var arr = new Array(4)
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
  • 使用 [ ] 字面量来创建数组
var arr = [1,2,3,4]

访问数组元素

数组元素的访问:通过索引(下标)来访问

  • 数组的索引值从0开始到数组的长度减1
  • 数组创建后,都有一个属性 length 代表数组的长度(数组元素的个数)

数组长度 = 数组索引 + 1

  • 通过循环来访问数组元素(数组遍历)

数组元素的操作

  1. 修改数组长度
  • 若数组长度(数组名.length)大于原有长度,会出现空元素(empty)
  • 若数组长度(数组名.length)小于原有长度,只会显示数组长度的元素
  • 当访问数组中空元素时,结果会出现 undefined
  1. 新增或修改数组元素
  • 若给定的索引超过了数组中的最大索引,则表示新增元素,否则表示修改元素

二维数组

通过两个下标(行下标、列下标)来确定一个数组元素。

创建数组

  • 使用 new Array( ) 字面量创建数组
var arr = new Array(
    new Array(11,22,33),
    new Array(44,55,66)
)
  • 使用 [ ] 字面量创建数组
var arr = [[11,22,33],[44,55,66]]

js中不允许有锯齿状数组,即如果第二行比第一行少一个,会按现有个数显示,访问该元素会显示 undefined

访问数组元素

数组名[下标1][下标2]

  • 若“下标1”为行下标,“下标2”为列下标,按行优先访问
  • 若“下标1”为列下标,“下标2”为行下标,按列优先访问

练习

题1:删除数组中的0

将一个数组中所有数值为0的元素删除。

思路:
建立新数组,将不为0的元素复制过去

var arr = [2,0,6,1,77,0,52,0,25,7]
var newArr = []

for(var i = 0 ; i<arr.length;i++)
{
    if(arr[i] != 0)
    {
        newArr[newArr.length] = arr[i]
    }
}
console.log(newArr)

输出结果:
JavaScript数组及其练习_第1张图片

题2:将数组元素倒置

将一个数组中所有元素的顺序反过来。

方法一

思路:
通过数组下标进行互换

var arr = [23,78,12,45,89,90]
var tep
for(var i=0;i<arr.length/2;i++)
{
    tep = arr[i]
    arr[i] = arr[arr.length-1-i]
    arr[arr.length-1-i] = tep
}
console.log(arr) 

输出结果:
JavaScript数组及其练习_第2张图片

方法二

思路:
建立一个新数组,将原数组的元素复制过去

var arr = [23,78,12,45,89,90]
var newArr = []
for(var i = arr.length-1;i>=0;i--)
{
    newArr[newArr.length] = arr[i]
}
arr = newArr
console.log(arr)

输出结果:
JavaScript数组及其练习_第3张图片

方法三

思路:
通过数组下标进行互换

var arr = [23,78,12,45,89,90]
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)

输出结果:
JavaScript数组及其练习_第4张图片

题3:找出一个二维数组中每行元素的最大值

找出一个二维数组中每行元素的最大值。

//定义一个二维数组
var arr = [
    [45,78,32,10],
    [12,0,61,39],
    [5,-11,36,55]
]

//找最大值
for(var m=0;m<arr.length;m++)
{
    var max = arr[m][0]
    for(var n=1;n<arr[m].length;n++)
    {
        if(max<arr[m][n])
        {
            max = arr[m][n]
        }
    }
    console.log((m+1) + ':' + max)
}

输出结果:
JavaScript数组及其练习_第5张图片

题4:输出数组每行、每列、对角线元素之和

定义一个3×3的数组 输出每行、每列、对角线元素之和。

//定义一个3×3的数组
var arr = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]

//计算每行、每列的和
for(var i=0;i<arr.length;i++)  //确定控制行
{
    var sum1 = 0 //行
    var sum3 = 0 //列
    for(var j=0;j<arr[i].length;j++)   //确定控制列
    {
        sum1 += arr[i][j]
        sum3 += arr[j][i]  //内循环进行的快 内循环控制列的时候 竖着走的
    }
    console.log('第' + (i+1) + '行' + '=' + sum1)
    console.log('第' + (i+1) + '列' + '=' + sum3)
}

//正方形有对角线
var sum2 = 0  //正对角线
var sum4 = 0  //反对角线
for(var m=0;m<arr.length;m++)
{
    sum2 += arr[m][m]
    sum4 += arr[m][arr.length-m-1] //一个下标是最大值时另一个是最小
}
console.log(sum2)
console.log(sum4)

输出结果:
JavaScript数组及其练习_第6张图片

题5:数组转置

将一个二维数组转置。

//数组转置 四行三列 ---> 三行四列
var arr = [
    ['a','b','c'],
    ['d','e','f'],
    ['g','h','i'],
    ['j','k','l']
]
var res = []
for(var i=0;i<arr[0].length;i++)
{
    res[i] = []
    for(var j=0;j<arr.length;j++)
    {
        res[i][j] = arr[j][i]
    }
}
console.log(res)

输出结果:
JavaScript数组及其练习_第7张图片

题6:数组每行元素降序排列

让一个二维数组的每行元素都是降序排列的。

方法一:冒泡排序
var arr = [
    [23,14,56,45,34],
    [7,89,34,54,57]
]
for(var h=0;h<arr.length;h++)
{
    for(var i=0;i<arr[h].length-1;i++) //外循环是循环个数减一个
    {
        for(var j=0;j<arr[h].length-1-i;j++)  //内循环是循环个数减1减i个 是最少次数的循环
        {
            if(arr[h][j]<arr[h][j+1])
            {
                var tmp = arr[h][j]
                arr[h][j] = arr[h][j+1]
                arr[h][j+1] = tmp
            }
        }
    }
}

输出结果:
JavaScript数组及其练习_第8张图片

方法二:选择排序
var arr = [
    [23,14,56,45,34],
    [7,89,34,54,57]
]
for(var h=0;h<arr.length;h++) //二维数组需要排两行的序
{
    for(var i=0;i<arr[h].length-1;i++) //降序 循环n-1趟数找出最大的放前面
    {
        var max = arr[h][i]
        var t = i
        for(var j=i+1;j<arr[h].length;j++)  //拿设置好的max和每个作比较 找出最大的
        {
            if(max < arr[h][j])
            {
                max = arr[h][j]
                t = j
            }
        }
        if(t != i)  //当max和预设的值下标不一致时 互换位置
        {
            var tmp = arr[h][i]
            arr[h][i] = arr[h][t]
            arr[h][t] = tmp
        }
    }
}
console.log(arr)

输出结果:
JavaScript数组及其练习_第9张图片

你可能感兴趣的:(js,笔记,js)