ES5 数组some()方法
some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
some() 方法会依次执行数组的每个元素:
如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
注意: some() 不会对空数组进行检测。
注意: some() 不会改变原始数组。
array.some(function(currentValue,index,arr),thisValue)
thisValue是参数函数的this指向,如果不传则是参数函数的this是undefined。
let arr = [1,45,77,5];
let b = arr.some(function(curItem,curIndex,_arr){
console.log(curItem,curIndex,_arr,this);
return curItem>10;
});
console.log('b:',b);
上面的代码和预期的一样,some()里面的函数只循环了两次,当45>10的时候返回了true,并且跳出了循环,b=true;
下面用自己的方法实现:
function mySome(fn,_this){
if(typeof fn === "function") {
let r = false;
let arr = this;
for (let i =0; i <arr.length; i++) {
if (fn.call(_this,arr[i],i,arr)) {
r = true;
break;
}
}
return r;
}
}
Array.prototype.mySome = mySome;
let c = arr.mySome(function(curItem,curIndex,_arr){
console.log(curItem,curIndex,_arr,this);
return curItem>10;
},window);
console.log('c:',c);
array.every(fn,_this)
array.every(function(currentValue,index,arr),thisValue)
thisValue是参数函数的this指向,如果不传则是参数函数的this是undefined。
数组中还有一个every()方法,写法和some()函数一样,功能也是对数组中的每一项进行判断,是否满足参数函数的条件,如果所有的都满足,则返回true,如果有一项不满足,就停止循环,返回false。