JavaScript数组及其练习
Posted 遥岑.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript数组及其练习相关的知识,希望对你有一定的参考价值。
目录
数组
数组是一组类型相同的数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。
一维数组
通过一个下标就可以确定数组元素的位置。
创建数组
- 使用 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
- 通过循环来访问数组元素(数组遍历)
数组元素的操作
- 修改数组长度
- 若数组长度(数组名.length)大于原有长度,会出现空元素(empty)
- 若数组长度(数组名.length)小于原有长度,只会显示数组长度的元素
- 当访问数组中空元素时,结果会出现 undefined
- 新增或修改数组元素
- 若给定的索引超过了数组中的最大索引,则表示新增元素,否则表示修改元素
二维数组
通过两个下标(行下标、列下标)来确定一个数组元素。
创建数组
- 使用 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)
输出结果:
题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)
输出结果:
方法二
思路:
建立一个新数组,将原数组的元素复制过去
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)
输出结果:
方法三
思路:
通过数组下标进行互换
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)
输出结果:
题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)
}
输出结果:
题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)
输出结果:
题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)
输出结果:
题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
}
}
}
}
输出结果:
方法二:选择排序
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数组及其练习的主要内容,如果未能解决你的问题,请参考以下文章