一、循环结构
1、while循环
'当'循环,当条件为真时,执行循环体语句
while(条件){
循环体语句;
}
2、do-while循环
'直到'循环。
(1)'do'是关键字:必须和while结合使用,不能单独使用
(2)无论条件是否为真,循环体语句至少执行一次
3、for循环
for(初始化变量;条件表达式;操作表达式){
循环体语句;
}
(1)三个表达式都可以省略,但是表达式之间的分号不能省略
(2)初始化变量:给循环变量、其他变量进行初始化
(3)条件表达式:控制循环体语句是否执行
(4)操作表达式:使循环趋向结束的语句
转换为while循环
初始化变量;
while(条件表达式){
循环体语句;
操作表达式;
}
4、循环嵌套
var i,j,s=0;
for(i=1;i<=10;i++){ ---> 外循环
for(j=1;j<=10;j++){ ---> 内循环
s++;
}
}
在一个循环的内部再套一个或多个循环
(1)利用循环输出九九乘法表
for(var i=1;i<10;i++){
for(var j=1;j<=i;j++){
str += i+'*' + j + '='+i*j+'\t';
}
str +="\n";
}
console.log(str);
(2)输出100以内的所有素数
for(var n=2;n<=100;n++){//外循环:判断是否在100以内
for(var j=2;j<n;j++){//内循环:判断当前的n是否为素数
if(n%j===0){//n不是素数
break;//终止内循环
}
}
if(j>=n){//n是素数
console.log(n+'\t');//\t让数据与数据之间有间隔
}
}
(3)输出1000以内的所有'完数'
for(var n=1;n<=1000;n++){
var sum=0;
for(var j=1;j<n;j++){
if(n%j===0){
sum = sum+j;
}
}
if(sum===n){
console.log(n+'是完数');
}
}
(4)输出所有'水仙花'数
a = parseInt(n/100);
b = parseInt((n-a*100)/10);
c = n-a*100-b*10;
for(var a=0,b=0,c=0,n=100;n>=100,n<1000;n++){
a = parseInt(n/100);
b = parseInt((n-a*100)/10);
c = n-a*100-b*10;
if(a*a*a+b*b*b+c*c*c===n){
console.log(n+'是水仙数')
}
}
二、数组:类型相同的数据的集合
1、创建数组
(1)使用'[]'创建
var 变量名 = [1,2,3,4];
(2)使用 'new Array'创建
var 变量名 = new Array() //创建一个空数组
2、数组的属性
length(数组默认属性,表示数组的长度)
3、数组元素的访问
数组名[index],'index'的取值在0~length-1
(1)找出一个数组的最大值
var arr =[45,12,35,78,99,466,231];
for(var i=0;i<arr.length;i++){
if(max<arr[i]){
max = arr[i];
}
}
console.log(arr);
console.log('Max:',max);
(2)反转数组中的元素
var arr =[45,12,35,78,99,466,231];
console.log('原数组:',arr);
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);
4、for...in循环
遍历数组或集合的
for(var 变量 in 数组名或集合名) //变量中存放的数组或集合的索引
{
数组名[变量]
}
5、for...of循环
遍历数组和集合
for(var 变量 of 数组名或集合名) //变量中存放的是数组或集合中的元素
{
console.log(变量);
}
6、forEach循环
arr.forEach(function(k){ //依次从数组中取出元素放在k中,然后将k作为参数传递给函数
console.log(k);
})
三、二维数组
1、创建
(1)使用'[]'
var arr = [[1,2,3],[4,5,6],[7,8,9]] //3行3列的二维数组
(2)使用'new Array'
var a = new Array(
new Array(10,20,30),
new Array(11,22,33),
new Array(45,56,67)
)
2、元素的访问
数组名[行下标][列下标]
(1)二维数组的转置
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++){
res[i]=[];
for(var j=0;j<a.length;j++){
res[i][j]=a[j][i];
}
}
console.log("转置后:",res);
(2)定义一个二维数组,输出这个数组的每行元素的最大值
var a = new Array(
new Array(10,40,30),
new Array(11,55,33),
new Array(45,86,97)
)
for(var i=0;i<a[0].length;i++){
var max = a[i][0];
for(var j=1;j<a[i].length;j++){
if(max<a[i][j]){
max=a[i][j];
}
}
console.log(max);
}