Javascript Array.prototype.some()
2015-09-22 10:53
573 查看
当我们使用数组时,查找数组中包含某个特殊的项是非常常见的动作。下面例子是一个简单的实现:
在这个例子中for循环中做了遍历数组元素并进行if条件判断,这个for循环和大多for循环相比有些许复杂,只要找到对应项,循环遍历将会停止。但是我们想如果能传入特定的回调函数来处理此逻辑就更好了,幸运的是Javascript给我们提供了some方法。如果想知道some的使用细节和兼容性情况,请戳这里.
some方法适应于所有数组,下面我们来看一例子,使用some方法,解决上面例子的问题:
some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some 将会立即返回 true。否则,some 返回 false。callback 只会在那些”有值“的索引上被调用,不会在那些被删除或从来未被赋值的索引上调用。
callback 被调用时传入三个参数:元素的值,元素的索引,被遍历的数组。
如果为 some 提供了一个 thisArg 参数,将会把它传给被调用的 callback,作为 this 值。否则,在非严格模式下将会是全局对象,严格模式下是 undefined。
some 被调用时不会改变数组。
some 遍历的元素的范围在第一次调用 callback. 时就已经确定了。在调用 some 后被添加到数组中的值不会被 callback 访问到。如果数组中存在且还未被访问到的元素被 callback 改变了,则其传递给 callback 的值是 some 访问到它那一刻的值。
除数组元素外,回调函数还可接收两个参数:数组元素当前索引及该数组。这在数组中的某个元素与改元素的其他元素做比较时是非常有用的。看下面这个例子:
view source
但是不幸的是some方法只能在IE9+及现代浏览器中运行,如果想兼容老版本的浏览器,可以使用Underscore库中的some方法或者 compatibility shim 提供的
以上就是对some方法的基本介绍,希望对大家有所帮助,文中不妥支持还望批评斧正。
转载声明:
本文标题:Javascript Array.prototype.some()
本文链接:http://www.zuojj.com/archives/756.html,转载请注明转自Benjamin-专注前端开发和用户体验
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); |
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)); |
callback 被调用时传入三个参数:元素的值,元素的索引,被遍历的数组。
如果为 some 提供了一个 thisArg 参数,将会把它传给被调用的 callback,作为 this 值。否则,在非严格模式下将会是全局对象,严格模式下是 undefined。
some 被调用时不会改变数组。
some 遍历的元素的范围在第一次调用 callback. 时就已经确定了。在调用 some 后被添加到数组中的值不会被 callback 访问到。如果数组中存在且还未被访问到的元素被 callback 改变了,则其传递给 callback 的值是 some 访问到它那一刻的值。
除数组元素外,回调函数还可接收两个参数:数组元素当前索引及该数组。这在数组中的某个元素与改元素的其他元素做比较时是非常有用的。看下面这个例子:
view source
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)); |
Array#some老版本浏览器兼容方法。
以上就是对some方法的基本介绍,希望对大家有所帮助,文中不妥支持还望批评斧正。
转载声明:
本文标题:Javascript Array.prototype.some()
本文链接:http://www.zuojj.com/archives/756.html,转载请注明转自Benjamin-专注前端开发和用户体验
相关文章推荐
- 浅谈jsp、freemarker、velocity区别
- Javascript 随机数 int 范围一个数 float
- js中数组拼接成字符串
- js屏幕尺寸 笔记
- 后台json转换
- js往数组中添加值用push()函数
- js中使用正则表达式(四)检索模式说明
- JS 设置 Cookie
- Javascript 判断一个数字是否含有小数点
- 深度解析JSP工作原理
- javascript解析
- js中使用正则表达式(三)RegExp对象构造函数属性介绍
- extjs2.3 GridPanel样本
- ExtJs桌面组件(DeskTop)
- 【js】js 让图片旋转
- 用JS关闭带框架的窗口(转自百度知道)
- js 让小数四舍五入保留两位小数的函数是?
- javascript在调试bug的奇淫技巧(Chrome, Firebug, Filddle 调试)
- JavaScript表单字段常用的验证代码
- knockoutJS学习笔记04:监控属性