一.every
(1).every
- 如果有一个不满足条件就停止遍历,条件就是return后面的表达式
- 返回一个bool
var res = data.every(function(elem, index, array){
return elem.isfree =='0';
},{name: 'test'})
(2).every重写
Array.prototype.myEvery = function(fn){
var arr = this,
len = arr.length,
arg2 = arguments[1] || window,
res = true;
for(var i = 0; i < len; i++){
if(!fn.apply(arg2, [arr[i], i, arr])){
res = false;
break;
}
}
return res;
}
二.some
(1).some
- 如果有一个满足条件就停止遍历,条件就是return后面的表达式
- 返回一个bool
var res = data.every(function(elem, index, array){
return elem.isfree =='0';
},{name: 'test'})
(2).some重写
Array.prototype.myEvery = function(fn){
var arr = this,
len = arr.length,
arg2 = arguments[1] || window,
res = false;
for(var i = 0; i < len; i++){
if(fn.apply(arg2, [arr[i], i, arr])){
res = true;
break;
}
}
return res;
}
三.reduce(归纳函数)
(1).reduce
没有改变作用域的参数
var newArr = data.reduce(function(prev, elem, index, arr){
prev.push(elem.course);
return prev;
},[])
(2).简单用法(用于格式化网络数据):
var cookieDatas = document.getElementById('J_cookieData').innerHTML;
var cookieArr = cookieDatas.split('; ');
var cookieObj = cookieArr.reduce(function(prev, elem){
var item = elem.split('=');
prev[item[0]] = item[1];
return prev;
},{})
(3).重写reduce
Array.prototype.myReduce = function(fn,initialValue){
var arr = this,
len = arr.length,
arg2 = arguments[2] || window,
item;
for(var i = 0; i < len; i++){
initialValue = fn.apply(arg2, [initialValue, arr[i], i, arr])
}
return initialValue;
}
四.reduceRight
(1).reduceRight
没有改变作用域的参数
var newArr = data.reduceRight(function(prev, elem, index, arr){
prev.push(elem.course);
return prev;
},[])
(2).重写reduceRight
Array.prototype.myReduce = function(fn,initialValue){
var arr = this,
len = arr.length,
arg2 = arguments[2] || window,
item;
for(var i = len-1; i >= 0; i++){
initialValue = fn.apply(arg2, [initialValue, arr[i], i, arr])
}
return initialValue;