博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES5-Array-some/every
阅读量:6343 次
发布时间:2019-06-22

本文共 2343 字,大约阅读时间需要 7 分钟。

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即返回不再执行 了。

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;  };}复制代码

转载地址:http://jjyla.baihongyu.com/

你可能感兴趣的文章
Rust基础笔记之浅谈Ownership
查看>>
怎么让你的代码更Pythonic?光有技巧可不行,你还需要看这些……
查看>>
springboot+jjwt+security完美解决restful接口无状态鉴权
查看>>
小记 小狗与北京
查看>>
偏好设置简单封装
查看>>
Java 面向对象 之 继承
查看>>
深度揭秘:伪基站到底是怎么回事?
查看>>
bboss session手动移除用户会话方法介绍
查看>>
20+个很棒的Android开源项目
查看>>
育碧同 Mozilla 联手开发 AI 代码助手
查看>>
【实用】面对枯燥的源码,如何才能看得下去?
查看>>
智库说 | 徐远:数字时代的城市潜力
查看>>
《JSP极简教程》jsp c:forEach用法
查看>>
WebSocket详解(六):刨根问底WebSocket与Socket的关系
查看>>
LeetCode 122 Best Time to Buy and Sell Stock II(股票买入卖出的最佳时间 II)
查看>>
用 Go 写一个轻量级的 ssh 批量操作工具
查看>>
网站设计之合理架构CSS 架构CSS
查看>>
OTP 22.0 RC3 发布,Erlang 编写的应用服务器
查看>>
D语言/DLang 2.085.1 发布,修复性迭代
查看>>
手机玻璃表面检测机器视觉应用
查看>>