Javascript Array.prototype.some()

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

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

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

01function isPluto(element) {
02    return (element === "pluto");
03}
04 
05// Outputs: false
06console.log(planets.some(isPluto));
07 
08dwarfPlanets = [
09    "ceres",
10    "pluto",
11    "haumea",
12    "makemake",
13    "eris"
14];
15 
16// Outputs: true
17console.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 访问到它那一刻的值。

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

01function 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 
11evens = [2, 4, 6, 8];
12randoms = [0, 9, 2, 5];
13 
14// Outputs: false
15console.log(evens.some(isLessThanPrev));
16 
17// Outputs: true
18console.log(randoms.some(isLessThanPrev));

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

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

转载于:https://www.cnblogs.com/viewcozy/p/4828308.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值