目录
一、数组
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)