当我们使用数组时,查找数组中包含某个特殊的项是非常常见的动作。下面例子是一个简单的实现:

01 planets = [
02     "mercury",
03     "venus",
04     "earth",
05     "mars",
06     "jupiter",
07     "saturn",
08     "uranus",
09     "neptune"
10 ];
11  
12 // Default to false
13 var containsPluto = false;
14  
15 for (var i = 0; i < planets.length && !containsPluto; i++) {
16     if (planets[i] === "pluto") {
17         containsPluto = true;
18     }
19 }
20  
21 // Outputs: false
22 console.log(containsPluto);

在这个例子中for循环中做了遍历数组元素并进行if条件判断,这个for循环和大多for循环相比有些许复杂,只要找到对应项,循环遍历将会停止。但是我们想如果能传入特定的回调函数来处理此逻辑就更好了,幸运的是Javascript给我们提供了some方法。如果想知道some的使用细节和兼容性情况,请戳这里.
some方法适应于所有数组,下面我们来看一例子,使用some方法,解决上面例子的问题:

01 function isPluto(element) {
02     return (element === "pluto");
03 }
04  
05 // Outputs: false
06 console.log(planets.some(isPluto));
07  
08 dwarfPlanets = [
09     "ceres",
10     "pluto",
11     "haumea",
12     "makemake",
13     "eris"
14 ];
15  
16 // Outputs: true
17 console.log(dwarfPlanets.some(isPluto));

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

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

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

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

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

除数组元素外,回调函数还可接收两个参数:数组元素当前索引及该数组。这在数组中的某个元素与改元素的其他元素做比较时是非常有用的。看下面这个例子:

01 function isLessThanPrev(el, index, arr) {
02     // The first element doesn't have a predecessor,
03     // so don't evaluate it.
04     if (index === 0) {
05         return;
06     else {
07         return (el < arr[index - 1]);
08     }
09 }
10  
11 evens = [2, 4, 6, 8];
12 randoms = [0, 9, 2, 5];
13  
14 // Outputs: false
15 console.log(evens.some(isLessThanPrev));
16  
17 // Outputs: true
18 console.log(randoms.some(isLessThanPrev));

但是不幸的是some方法只能在IE9+及现代浏览器中运行,如果想兼容老版本的浏览器,可以使用Underscore库中的some方法或者 compatibility shim 提供的Array#some老版本浏览器兼容方法。

以上就是对some方法的基本介绍,希望对大家有所帮助,文中不妥支持还望批评斧正。

转载声明:

本文标题:Javascript Array.prototype.some()

本文链接:http://www.zuojj.com/archives/756.html,转载请注明转自Benjamin-专注前端开发和用户体验

Javascript Array.prototype.some()的更多相关文章

  1. javascript:Array.prototype.slice.call(arguments)

    我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js ...

  2. [JavaScript] Array.prototype.reduce in JavaScript by example

    Let's take a closer look at using Javascript's built in Array reduce function. Reduce is deceptively ...

  3. JavaScript,通过分析Array.prototype.push重新认识Array

    在阅读ECMAScript的文档的时候,有注意到它说,数组的push方法其实不仅限于在数组中使用,专门留作通用方法.难道是说,在一些类数组的地方也可以使用?而哪些是和数组非常相像的呢,大家或许一下子就 ...

  4. Javascript中Array.prototype.map()详解

    map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数.callback 每次执行后的返回值组合起来形成一个新数组. callback 函数只会在有值的索引上被调用:那些从来没被赋 ...

  5. JavaScript 兼容 Array.prototype.slice.call

    IE9之前的IE版本的HTMLCollection以及NodeList不是Object的子类. 在通过Array.prototype.slice.call进行数组化的时候,IE9之前的IE版本会抛出异 ...

  6. JavaScript的Array.prototype.filter()详解

    摘抄与:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter 概述 ...

  7. JavaScript中Array.prototype.sort()的详解

    摘抄来源:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort sor ...

  8. [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)

    假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...

  9. javascript中 Array.prototype.slice的用法.

    首先看到 www.w3school.cn上的解释:http://www.w3school.com.cn/jsref/jsref_slice_array.asp 定义和用法 slice() 方法可从已有 ...

随机推荐

  1. hdu-5680 zxa and set(水题)

    题目链接: zxa and set Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Other ...

  2. HttpServletResponse接口

    public interface HttpServletResponse extends ServletResponse 描述一个返回到客户端的HTTP回应.这个接口允许Servlet程序员利用HTT ...

  3. Interesting Applications in Machine Learning and Computer Vision

    1.Visually Indicated Sounds 网址:http://vis.csail.mit.edu/ 通过视频预测敲打的声音 2.AI Porn Video Editor 代码网址:htt ...

  4. [CAMCOCO][C#]我的系统架构.服务器端.(一)

    尽量少的前言 虽然写了N年代码了,但总觉得什么东西都是囫囵吞枣,无法尽得其精髓.最近整理了一套心目中的架构,如有错误之处,烦劳不吝指正,老胡在此不胜感激!! 第一篇 我心目中的架构 做了无数个系统,写 ...

  5. .NET DLL 保护措施详解(五)常规条件下的破解

    为了证实在常规手段破解下能有效保护程序核心功能(演示版本对AES加解密算法及数据库的密钥(一段字符串)进行了保护),特对此DLL保护思路进行相应的测试,包含了反编译及反射测试,看是否能得到AES加解密 ...

  6. SQL SERVER 中的行列转换小结

    1. 介绍说明 前段时间组内的小伙伴在升级维护项目中,经常涉及一些复杂的数据转换问题,让我去看下有些地方怎么处理,我发现好多都是涉及到行列转换的问题,处理起来经常会比较麻烦,借此也总结一下,方便以后的 ...

  7. android菜鸟学习笔记7----android布局(二)

    3.FrameLayout:帧布局 如同Flash或者photoshop中图层的概念,在上面的图层遮盖下面的图层,没被遮到的地方仍然显示出来. 右击res/layout,然后在弹出的菜单中选择new, ...

  8. asp连接SQL数据库的代码

    connstr="driver={SQL Server};server=(local);uid=sa;pwd=sa;database=Your database" 语法介绍: 1. ...

  9. 关于C# webform 项目发布 aspx页面无任何代码 每个页面都以dll形式发布

    关于C# webform 项目发布 注意:aspx页面无任何代码,每个页面都以dll形式发布带bin文件夹里 具体操作方法如下图:

  10. 20141201--测试 jQuery

    测试 JavaScript 框架库 - jQuery jQuery 是一个 JavaScript 库. 引用 jQuery <!DOCTYPE html> <html> < ...