zoukankan      html  css  js  c++  java
  • Javascript Array.prototype.some()

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

    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方法的基本介绍,希望对大家有所帮助,文中不妥支持还望批评斧正。

  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/viewcozy/p/4828308.html
Copyright © 2011-2022 走看看