ES5 数组方法every和some

Array.prototype.every()

概述

every() 方法测试数组的所有元素是否都通过了指定函数的测试。

语法

arr.every(callback[, thisArg])

参数

callback
用来测试每个元素的函数。
thisArg
执行 callback 时使用的 this 值。

描述

every 方法为数组中的每个元素执行一次 callback 函数,直到它找到一个使 callback 返回 false(表示可转换为布尔值 false 的值)的元素。如果发现了一个这样的元素,every 方法将会立即返回 false。否则,callback 为每一个元素返回 trueevery 就会返回 truecallback 只会为那些已经被赋值的索引调用。不会为那些被删除或从来没被赋值的索引调用。

callback 被调用时传入三个参数:元素值,元素的索引,原数组。

如果为 every 提供一个 thisArg 参数,在该参数为调用 callback 时的 this 值。如果省略该参数,则callback 被调用时的 this 值,在非严格模式下为全局对象,在严格模式下传入 undefined

every 不会改变原数组。

every 遍历的元素范围在第一次调用 callback 之前就已确定了。在调用 every 之后添加到数组中的元素不会被 callback 访问到。如果数组中存在的元素被更改,则他们传入 callback 的值是 every 访问到他们那一刻的值。那些被删除的元素或从来未被赋值的元素将不会被访问到。

实例

例子:检测所有数组元素的大小

下例检测数组中的所有元素是否都大于 10。

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true

兼容旧环境(Polyfill)

在第 5 版时,every 被添加进 ECMA-262 标准;因此在某些实现环境中不被支持。你可以把下面的代码放到脚本的开头来解决此问题,该代码允许在那些没有原生支持 every 的实现环境中使用它。该算法是 ECMA-262 第5版中指定的算法,假定 Object 和 TypeError 拥有它们的初始值,且 fun.call 等价于Function.prototype.call

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;
  };
}

Array.prototype.some()

概述

some() 方法测试数组中的某些元素是否通过了指定函数的测试。

语法

arr.some(callback[, thisArg])

参数

callback
用来测试每个元素的函数。
thisArg
执行 callback 时使用的 this 值。

描述

some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some 将会立即返回 true。否则,some 返回falsecallback 只会在那些”有值“的索引上被调用,不会在那些被删除或从来未被赋值的索引上调用。

callback 被调用时传入三个参数:元素的值,元素的索引,被遍历的数组。

如果为 some 提供了一个 thisArg 参数,将会把它传给被调用的 callback,作为 this 值。否则,在非严格模式下将会是全局对象,严格模式下是 undefined

some 被调用时不会改变数组。

some 遍历的元素的范围在第一次调用 callback. 时就已经确定了。在调用 some 后被添加到数组中的值不会被callback 访问到。如果数组中存在且还未被访问到的元素被 callback 改变了,则其传递给 callback 的值是some 访问到它那一刻的值。

示例

例子:测试数组元素的值

下面的例子检测在数组中是否有元素大于 10。

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true

兼容旧环境(Polyfill)

在第 5 版时,some 被添加进 ECMA-262 标准;这样导致某些实现环境可能不支持它。你可以把下面的代码插入到脚本的开头来解决此问题,从而允许在那些没有原生支持它的实现环境中使用它。该算法是 ECMA-262 第 5 版中指定的算法,假定 Object 和 TypeError 拥有他们的初始值,且 fun.call 等价于 Function.prototype.call

if (!Array.prototype.some)
{
  Array.prototype.some = 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 true;
    }

    return false;
  };
}

总结:

方法区别

every() 每一项都返回true才返回true
some() 只要有一项返回true就返回true

类似&&和||的关系
时间: 2024-10-12 17:34:09

ES5 数组方法every和some的相关文章

ES5 数组方法map

概述 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. 语法 array.map(callback[, thisArg]) 参数 callback 原数组中的元素经过该方法后返回一个新的元素. currentValue callback 的第一个参数,数组中当前被传递的元素. index callback 的第二个参数,数组中当前被传递的元素的索引. array callback 的第三个参数,调用 map 方法的数组. thisArg 执行 callback

ES5数组方法

先标明参考出处: http://blog.csdn.net/codebistu/article/details/8049705 本来写过一篇有关数组新方法的(详见: [转]JavaScript函数和数组总结), 结果埋的太深找起来不方便, 在这儿专门来一篇总结下. 1. forEach forEach(f [,o]): 此方法类似于for/in循环, 其作用是遍历整个数组并执行函数的某些操作, 但它不会遍历数组的属性. 它接受一个函数参数, 该函数可以有1,2与3个参数. 完整的三个参数分别为:

字符串方法,js中的数组方法,ES5新增的数组方法,以及jQuery中的数组方法

说明:本片主要对比介绍与数组操作相关的方法 (一)字符串方法(String对象方法) indexOf() //检索字符串 lastIndexOf() //从后向前搜索字符串 match() //找到一个或多个正则表达式的匹配 replace() //替换与正则表达式匹配的子串 search() //检索与正则表达式相匹配的值 slice() //提取字符串的片断,并在新的字符串中返回被提取的部分 split() //把字符串分割为字符串数组 substr() //从起始索引号提取字符串中指定数目

es6的新增方法和es5数组的一些方法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

js 数组方法总结

Array数组: length属性 可通过array.length增加或者减少数组的长度,如;array.length=4(数组长3,第四位为undefined),也可单纯获得长度.array[array.length]=''赋值. 检测数组 检测是否数组ES3  instanceof array  ES5新增的Array.isArray(),支持的IE9+,Opera 10.5+,Chrome,Safari5+. 一:原数组不变  [,start],表示0或1个参数 concat() 无参,返

JavaScrip ES6数组方法

ES6提供的两个静态方法: Array.from Array.of ES6提供操作.填充和过滤数组的方法: Array.prototype.copyWidthin Array.prototype.fill Array.prototype.find Array.prototype.findIndex ES6中有关于数组迭代的方法: Array.prototype.keys Array.prototype.values Array.prototype.entries Array.prototype[

数组方法汇总

1,javascript提供的原型方法有:join(),push(),pop(),shift(),unshift(),concat(),slice(),splice(),sort(),reverse() 1)join(separator):将数组以分隔符连接起来,返回连接后的字符串,默认以','分隔. var arr = [1,2,3]; arr.join(); //1,2,3 arr.join('-') //1-2-3 2)push()&pop() push():接收任意数量参数,并添加至数组

php数组以及js数组方法整理

在js中数组非常经常用到,熟练掌握数组的方法能够大大的提高对自己的变成效率,最近解除php,学得非常皮毛,遇到一个问题,自己一直陷入foreach循环如何解决的死循环中.结果一直没能很好的解决,回来讨教了一下同学,更加觉得数组的一些方法很好用,所以有必要整理一下数组的一些方法,希望自己能牢记它们. 一,js数组的操作方法: 参照w3c内容:http://www.jb51.net/w3school/js/jsref_obj_array.htm 以及<javascript权威指南>和<jQu

【翻译】JavaScript中5个值得被广泛使用的数组方法

原文地址:http://colintoh.com/blog/5-array-methods-that-you-should-use-today?utm_source=javascriptweekly&utm_medium=email 在2009年十月ECMAScript 5被定义正式规范以来,一些可以提高工作效率的数组方法被提出.但是,由于ES5糟糕的浏览器支持率,这些方法并未被开发者广泛使用. “多余的”数组方法 没有人会质疑这些方法的可用性,但是如果针对它们而编写polyfill(关于pol