some
意指“某些”,指是否“某些项”合乎条件。与下面的every
算是好基友,every
表示是否“每一项”都要靠谱。
some:数组中有一个元素返回真值,结果就为true。
every:数组中有个元素不满足真值条件,结果就为false。
some()
some
为数组中的每一个元素执行一次 callback
函数,直到找到一个使得 callback
返回一个“真值”(即可转换为布尔值 true
的值)。如果找到了这样一个值,some
将会立即返回 true
。否则,some
返回 false
。
some
遍历的元素的范围在第一次调用 callback
时就已经确定了。在调用 some
后被添加到数组中的值不会被 callback
访问到。
语法
array.some(callback,[ thisObject]);
回调参数
function(currentValue, index, arr)
返回值
布尔值。如果数组中有元素满足条件返回 true
,否则返回 false
。
例如下面的简单使用:
var scores = [5, 8, 3, 10];
var current = 7;
function higherThanCurrent(score) {
return score > current;
}
scores.some(higherThanCurrent)//true
上面代码中,如果数组arr
有一个成员大于等于3,some
方法就返回true
。
- 我们自然可以使用
foreach
进行判断,不过,相比some
,foreach
不会中断循环,some
只要有true
即返回<font color=red size=4>不再执行</font>
了。
IE6-IE8扩展如下:
// 如果some不是函数
if (typeof Array.prototype.some != "function") {
// 函数表达式,fn和context为some传入参数
Array.prototype.some = function (fn, context) {
var passed = false;
if (typeof fn === "function") {
//[5, 8, 3, 10].some(fn, context),this代表原数组
for (var k = 0, length = this.length; k < length; k++) {
if (passed === true) break;
//context绑定fn中this,
//this[k], k, this为标准回调函数参数value,key,array
passed = !!fn.call(context, this[k], k, this);
}
}
return passed;
};
}
=》应用:
var scores = [5, 8, 3, 10];
var current = 7;
function higherThanCurrent(score) {
return score > current;
}
scores.some(higherThanCurrent)
every()
every()
方法用于检测数组所有元素
是否都符合指定条件
如果数组中检测到有一个元素不满足,则整个表达式返回 false
,且剩余的元素不会再进行检测。
every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。。
- every() 不会改变原始数组。
语法
arr.every(callback[, thisArg])
例子:
var arr = [1, 2, 3, 4, 5];
arr.every(function (elem, index, arr) {
return elem >= 3;
});
// false
上面代码中,数组arr并非所有成员大于等于3,所以返回false。
注意,对于空数组,some方法返回false,every方法返回true,回调函数都不会执行。
function isEven(x) { return x % 2 === 0 }//return不执行
[].some(isEven) // false
[].every(isEven) // true
兼容旧环境
if (!Array.prototype.every)
{
Array.prototype.every = function(fun /*, thisArg */)
{
'use strict';
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== 'function')
throw new TypeError();
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++)
{
if (i in t && !fun.call(thisArg, t[i], i, t))
return false;
}
return true;
};
}
网友评论