最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 以前我没得选,现在我只想用 Array.prototype.some

    正文概述 掘金(Xekin)   2021-01-13   339

    前言

    对于新手来说,用 for + break 来判断数组中是否有数组项满足某某条件往往很不友好,但是用 map 和 forEach 之类的方法又不可打断,那就可以介绍一下数组的 some 方法

    以前我没得选,现在我只想用 Array.prototype.some

    写这篇文章的目的就是想给大家好好的介绍一下 数组的 some 方法,它有多“骚”。

    语法

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

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

    如果一个thisArg参数提供给some(),它将被用作调用的 callback的 this 值。否则, 它的 this value将是 undefined。this的值最终通过callback来观察,根据 the usual rules for determining the this seen by a function的this判定规则来确定。

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

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

    浏览器支持情况

    以前我没得选,现在我只想用 Array.prototype.some

    重塑

    它的能力远不止于此,它也可以成为神奇宝贝里的“百变怪”,想要变成 includes 也可以。 以前我没得选,现在我只想用 Array.prototype.some

    some -> includes

    var fruits = ['apple', 'banana', 'mango', 'guava'];
    
    Array.prototype.someIncludes = function (val) {
      return this.some(function(arrVal) {
        return val === arrVal;
      });
    }
    
    fruits.someIncludes('kela') // false
    fruits.someIncludes('banana') // true
    

    衍生

    下面的例子检测在数组中是否有元素大于 10。

    function isBiggerThan10(element, index, array) {
      return element > 10;
    }
    
    [2, 5, 8, 1, 4].some(isBiggerThan10);  // false
    [12, 5, 8, 1, 4].some(isBiggerThan10); // true
    

    箭头函数 可以通过更简洁的语法实现相同的用例.

    [2, 5, 8, 1, 4].some(x => x > 10);  // false
    [12, 5, 8, 1, 4].some(x => x > 10); // true
    
    var fruits = ['apple', 'banana', 'mango', 'guava'];
    
    function checkAvailability(arr, val) {
      return arr.some(arrVal => val === arrVal);
    }
    
    checkAvailability(fruits, 'kela');   // false
    checkAvailability(fruits, 'banana'); // true
    
    var TRUTHY_VALUES = [true, 'true', 1];
    
    function getBoolean(value) {
      'use strict';
    
      if (typeof value === 'string') {
        value = value.toLowerCase().trim();
      }
    
      return TRUTHY_VALUES.some(function(t) {
        return t === value;
      });
    }
    
    getBoolean(false);   // false
    getBoolean('false'); // false
    getBoolean(1);       // true
    getBoolean('true');  // true
    

    总结

    some 的使用场景还有非常多,当你遇到xxxxx的时候,就是它大显身手的时候。深入研究它,对你今后的业务开发及面试都有很大的帮助。


    起源地下载网 » 以前我没得选,现在我只想用 Array.prototype.some

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元