js循环基础

1. 循环

1.1 for循环

在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件。由循环体及循环的终止条件组成的语句,被称之为循环语句

for(let 初始化变量;条件表达式;条件控制语句)
{
   //循环体
}

案例:

输入10句 "早上好"

<script>
//基本写法
for(var i = 1; i<=10; i++  )
    {
         console.log('早上好');
    }
// 用户输入次数
var num = prompt('请输入次数:');
for(var i = 1; i<= num ;i++)
    {
        console.log('早上好');
    }
</script>
1.2 for in循环

for in循环是用来遍历对象的。要知道JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。(注意:遍历时不仅能读取对象自身上面的成员属性,也能遍历出对象的原型属性)

<script>
let obj = {a:1, b:2, c:3};
for (let prop in obj) {    //prop指对象的属性名
console.log(prop, obj[prop]);
}
</script>

输出为 :

1.3Array forEach循环

forEach循环里面没办法用break跳出循环。而且在IE中无法实现,需要做兼容处理。)

<script>
let arr = ['123','sfdf','hjtghrt'];
arr.forEach(function (value, index) {
    console.log(value,index);
});
</script>

输出为: 

 1.4 for of循环

这个方法避开了for-in循环的所有缺陷。而且,它可以正确响应break、continue和return语句。

<script>
let arr = ['123','sfdf','hjtghrt'];
for(let item of arr) {
    console.log(item);
}
</script>

 输出为:

 for-of循环不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象。但是for of也有一个致命伤,就像例子看到的,没有索引。对,这是优点也是缺点。遍历数组对象,直接就是item.属性(或者item[属性]),而不用像for循环那样arr[index].属性(arrindex)。但是你有的时候真的就得用到index。只能把数组转成Map()。如果真的需要用到index,还是换成forEach吧。

1.5 Array map()

 map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
 注意:map 和 forEach 方法都是只能用来遍历数组,不能用来遍历普通对象

<script>
let arr = [1,2,3];
let tt = arr.map(function(i){
 console.log(i)
 return i*2;
})
</script>

输出为:

 

1.6 Array filter()

创建一个新数组,其中包含通过所提供函数实现测试的所有元素

语法:var newArray = arr.filter(callback(element[,index[,array]])[,thisArg])

callback:
	用来测试数组中的每个元素的函数;返回true表示该元素通过测试,保留该元素,false则不保留。他接受三个参数:
		element:数组中当前正在处理的元素。
		index:正在处理元素在数组中的索引
		array:调用了filter的数组本身
thisArg:
	执行callback时,用于this的值

返回值:

一个新的、由通过测试的元素组成的数组,如果没有任何元素通过测试,则返回空数组 

1.7 while 循环

执行思路:

先执行条件表达式,如果结果为 true,则执行循环体代码;如果为 false,则退出循环,执行后面代码

执行循环体代码

循环体代码执行完毕后,程序会继续判断执行条件表达式,如条件仍为true,则会继续执行循环体,直到循环条件为 false 时,整个循环过程才会结束

<script>
cars=["BMW","Volvo","Saab","Ford"];
var i=0;
while (cars[i])
{
	console.log(cars[i])
	i++;
};
</script>

输出为:

注意

  • 使用 while 循环时一定要注意,它必须要有退出条件,否则会称为死循环

  • while 循环和 for 循环的不同之处在于 while 循环可以做较为复杂的条件判断,比如判断用户名和密码

1.8 do while循环

执行思路:

  1. 先执行一次循环体代码

  2. 再执行表达式,如果结果为true,则继续执行循环体代码,如果为false,则退出循环,继续执行后面的代码

  3. 先执行再判断循环体,所以dowhile循环语句至少会执行一次循环体代码

需求:弹出一个提示框, 你爱我吗? 如果输入我爱你,就提示结束,否则,一直询问

<script>
do {
	var love = prompt('你爱我吗?');
} while (love != '我爱你');
	alert('登录成功');
</script>

结果:

输入不爱

进入循环

输入我爱你

显示登录成功

 

1.9 some() 

some() 方法用于检测数组中的元素是否满足指定条件,如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false。

注意:

some() 不会对空数组进行检测。
some() 不会改变原始数组。

语法:
实例1:
 
        let arr = [10, 21, 32, 45, 5];
        let flag = arr.some(item => {
            if (item == 0) {
                return item;
            }
        });
        console.log(flag); //输出结果false
 
实例2:
 
        let arr = [1, 22, 37, 34, 45];
        let flag = arr.some(item => {
            if (item == 1) {
                return item;
            }
        });
        console.log(flag); //输出结果true

返回值:

some() 方法有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测,所有元素都不满足条件时才返回false

some一般使用场景大多都是用在:判断一个字段是否存在在某个数组中

1.10 every()

every要判断数组中是否每个元素都满足条件,只有都满足条件才返回true;只要有一个不满足就返回false;

注意:

若收到一个空数组,此方法在一切情况下都会返回true

语法:
实例1:
 
        let arr = [10, 20, 30, 40, 52];
        let flag = arr.every(item => item < 60);
        console.log(flag); //输出结果true
 
实例2:
 
        let arr = [11, 21, 31, 42, 51];
        let flag = arr.every(item => item < 51);
        console.log(flag); //输出结果false

返回值:

every() 方法如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。需要所有的元素都满足条件才返回true

 1.11 reduce()

对数组中的每个元素执行一个由你提供的reducer函数(升序执行),将其结果汇总为单个返回值

语法:

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

callback:执行数组中的每个值(如果没有提供initaValue)的函数,包含四个参数:
	accmulator:累计器累计回调的返回值;它是上一次调用回调时返回的累积值
	currentValue:数组中处理的元素
	index:数组中正在处理的当前元素的索引。如果提供了initialValue,则起始索引号为0,否则从索引1起始
	array:调用reduce()的数组

返回值:

函数累计处理的结果

1.12 reduceRight ()

方法接受一个函数作为累加器和数组的每个值(从右到左)将其减少为单个值

 语法:

arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])

callback:一个回调函数,用于操作数组中的每个元素,它可接受四个参数:
	accumulator:累加器,上一次调用回调函数时,回调函数返回的值。首次调用回调函数时,如果initiaValue存在,累加器即为initiaValue,否则须为数组中的最后一个元素
	currentValue:当前元素,当前被处理的元素
	index:数组中当前被处理的元素的索引
	array:调用reduceRight()的数组
initialValue:首次调用 callback 函数时,累加器 accumulator 的值。如果未提供该初始值,则将使用数组中的最后一个元素,并跳过该元素。如果不给出初始值,则需保证数组不为空

返回值:执行之后的返回值 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值