假设有一个有序数组[1, 2, 3, 4, 5, 6, 7, 8, 9],我们要找出其中所有小于等于5的元素,为了节约时间,要在找完符合条件的所有数据时退出循环。
forEach:
var s = [1, 2, 3, 4, 5, 6, 7, 8, 9];
s.forEach( function (elem, index) {
console.log("第"+index+"次循环:"+elem);
if(elem >5) return;
})
打印出的结果为:
第0次循环:1
第1次循环:2
第2次循环:3
第3次循环:4
第4次循环:5
第5次循环:6
第5次循环:6
第6次循环:7
第7次循环:8
第8次循环:9
结果发现return并不能终止循环,遍历还是会继续进行下去。
every:
var s = [1, 2, 3, 4, 5, 6, 7, 8, 9];
s.every( function (elem, index) {
console.log("第"+index+"次循环:"+elem);
if(elem <=5) return true;
})
结果:
第0次循环:1
第1次循环:2
第2次循环:3
第3次循环:4
第4次循环:5
第5次循环:6
发现循环遍历可以控制了,不过如果要按照需求来做,那么应将if条件改为“<”号,因为every每轮循环返回的boolean值将决定下轮循环是否执行,true为是,false为否,false为默认返回值。
some:
var s = [1, 2, 3, 4, 5, 6, 7, 8, 9];
s.some( function (elem, index) {
console.log("第"+index+"次循环:"+elem);
if(elem >= 5) return true;
})
结果:
第0次循环:1
第1次循环:2
第2次循环:3
第3次循环:4
第4次循环:5
发现some中默认返回值和every一样也是false,不过和every不一样的是true控制some跳出循环(不再进行下一次循环)。
总结
forEach:循环不可控
every,some循环可控
跳出循环条件:
every—return false(默认)
some—return true- 继续执行条件:
every—return true
some—return false(默认)