some
意指“某些”,指是否“某些项”合乎条件。与下面的every
算是好基友,every
表示是否“每一项”都要靠谱。
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
即返回不再执行 了。
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() 不会改变原始数组。
语法
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; };}复制代码