-
every和some
every和some返回布尔值,every表示数组中每一项的满足回调函数时,返回true,some只要有一项满足就返回true
every
every如果有一个不满足条件就停止遍历,条件就是renturn后面的表达式。
参数: fn(elem. index, arr),this指向
var arr = [1,2,3,4,5,6];
var res = arr.every(function(elem, index, arr) {
console.log(elem) ;
return elem < 3;
})
在这个函数中,输出了三个元素,可见在第三次执行函数时,判断不满足条件,返回结果false。
我们可以重写这个函数
Array.prototype.myEvery = function(fn) {
var arr = this,
len = arr.length,
res = true;
for (var i = 0; i < len; i++) {
if(!fn(arr[i], i, arr)) { //回调函数的结果为false,表示不满足条件
res = false;
break;
}
}
return res;
}
同样根据for循环,每循环一次执行回调函数,当回调函数的结果为false,退出循环,返回false。当循环结束,每一次循环的结果都是true,最后返回true。
some
some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
参数 同every
var arr = [1,2,3,4,5,6];
var res = arr.some(function(elem, index, arr) {
console.log(elem) ;
return elem < 3;
})
可见,回调函数第一次执行时满足条件,直接返回true
重写和some类似,只需要把res改为false,然后判断条件修改就行了
Array.prototype.mySome = function(fn) {
var arr = this,
len = arr.length,
res = false;
for (var i = 0; i < len; i++) {
if(fn(arr[i], i, arr)) { //只要有一次循环的回调函数满足条件,就返回true同时结束循环
res = true;
break;
}
}
return res;
}
- reduce和reduceRight
reduce是归纳函数。MDN上,reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。reduce有俩个参数 fn initValue。fn是回调函数,initValue是初始化的值。其中fn有四个参数,我们可以看成两组 pre 和 elem, index,arra。每次遍历对象时,函数执行,将initValue赋值给pre。
Array.prototype.myReduce = function(fn, initValue) {
var arr = this,
len = arr.length,
item;
for(var i = 0; i < len; i++) {
initValue = fn(initValue, arr[i], i, arr)
}
return initValue;
}
reduceRight和reduce的区别是,reduceRight 从数组的右侧开始循环。