from、includes、indexOf:https://blog.csdn.net/j59580/article/details/53897630?utm_source=blogxgwz1

语法

Array.from(arrayLike[, mapFn[, thisArg]])

实例

  1.  
    // Array-like object (arguments) to Array
  2.  
    function f() {
  3.  
    return Array.from(arguments);
  4.  
    }
  5.  
     
  6.  
    f(1, 2, 3);
  7.  
    // [1, 2, 3]
  8.  
     
  9.  
     
  10.  
    // Any iterable object...
  11.  
    // Set
  12.  
    var s = new Set(["foo", window]);
  13.  
    Array.from(s);
  14.  
    // ["foo", window]
  15.  
     
  16.  
     
  17.  
    // Map
  18.  
    var m = new Map([[1, 2], [2, 4], [4, 8]]);
  19.  
    Array.from(m);
  20.  
    // [[1, 2], [2, 4], [4, 8]]
  21.  
     
  22.  
     
  23.  
    // String
  24.  
    Array.from("foo");
  25.  
    // ["f", "o", "o"]
  26.  
     
  27.  
     
  28.  
    // Using an arrow function as the map function to
  29.  
    // manipulate the elements
  30.  
    Array.from([1, 2, 3], x => x + x);
  31.  
    // [2, 4, 6]
  32.  
     
  33.  
     
  34.  
    // Generate a sequence of numbers
  35.  
    Array.from({length: 5}, (v, k) => k);
  36.  
    // [0, 1, 2, 3, 4]

源码

  1.  
    // Production steps of ECMA-262, Edition 6, 22.1.2.1
  2.  
    // Reference: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
  3.  
    if (!Array.from) {
  4.  
    Array.from = (function () {
  5.  
    var toStr = Object.prototype.toString;
  6.  
    var isCallable = function (fn) {
  7.  
    return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
  8.  
    };
  9.  
    var toInteger = function (value) {
  10.  
    var number = Number(value);
  11.  
    if (isNaN(number)) { return 0; }
  12.  
    if (number === 0 || !isFinite(number)) { return number; }
  13.  
    return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
  14.  
    };
  15.  
    var maxSafeInteger = Math.pow(2, 53) - 1;
  16.  
    var toLength = function (value) {
  17.  
    var len = toInteger(value);
  18.  
    return Math.min(Math.max(len, 0), maxSafeInteger);
  19.  
    };
  20.  
     
  21.  
    // The length property of the from method is 1.
  22.  
    return function from(arrayLike/*, mapFn, thisArg */) {
  23.  
    // 1. Let C be the this value.
  24.  
    var C = this;
  25.  
     
  26.  
    // 2. Let items be ToObject(arrayLike).
  27.  
    var items = Object(arrayLike);
  28.  
     
  29.  
    // 3. ReturnIfAbrupt(items).
  30.  
    if (arrayLike == null) {
  31.  
    throw new TypeError("Array.from requires an array-like object - not null or undefined");
  32.  
    }
  33.  
     
  34.  
    // 4. If mapfn is undefined, then let mapping be false.
  35.  
    var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
  36.  
    var T;
  37.  
    if (typeof mapFn !== 'undefined') {
  38.  
    // 5. else
  39.  
    // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
  40.  
    if (!isCallable(mapFn)) {
  41.  
    throw new TypeError('Array.from: when provided, the second argument must be a function');
  42.  
    }
  43.  
     
  44.  
    // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
  45.  
    if (arguments.length > 2) {
  46.  
    T = arguments[2];
  47.  
    }
  48.  
    }
  49.  
     
  50.  
    // 10. Let lenValue be Get(items, "length").
  51.  
    // 11. Let len be ToLength(lenValue).
  52.  
    var len = toLength(items.length);
  53.  
     
  54.  
    // 13. If IsConstructor(C) is true, then
  55.  
    // 13. a. Let A be the result of calling the [[Construct]] internal method of C with an argument list containing the single item len.
  56.  
    // 14. a. Else, Let A be ArrayCreate(len).
  57.  
    var A = isCallable(C) ? Object(new C(len)) : new Array(len);
  58.  
     
  59.  
    // 16. Let k be 0.
  60.  
    var k = 0;
  61.  
    // 17. Repeat, while k < len… (also steps a - h)
  62.  
    var kValue;
  63.  
    while (k < len) {
  64.  
    kValue = items[k];
  65.  
    if (mapFn) {
  66.  
    A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
  67.  
    } else {
  68.  
    A[k] = kValue;
  69.  
    }
  70.  
    k += 1;
  71.  
    }
  72.  
    // 18. Let putStatus be Put(A, "length", len, true).
  73.  
    A.length = len;
  74.  
    // 20. Return A.
  75.  
    return A;
  76.  
    };
  77.  
    }());
  78.  
    }

includes语法

var boolean = array.includes(searchElement[, fromIndex])

实例

  1.  
    [1, 2, 3].includes(2); // true
  2.  
    [1, 2, 3].includes(4); // false
  3.  
    [1, 2, 3].includes(3, 3); // false
  4.  
    [1, 2, 3].includes(3, -1); // true
  5.  
    [1, 2, NaN].includes(NaN); // true

源码

  1.  
    if (!Array.prototype.includes) {
  2.  
    Array.prototype.includes = function(searchElement /*, fromIndex*/) {
  3.  
    'use strict';
  4.  
    if (this == null) {
  5.  
    throw new TypeError('Array.prototype.includes called on null or undefined');
  6.  
    }
  7.  
     
  8.  
    var O = Object(this);
  9.  
    var len = parseInt(O.length, 10) || 0;
  10.  
    if (len === 0) {
  11.  
    return false;
  12.  
    }
  13.  
    var n = parseInt(arguments[1], 10) || 0;
  14.  
    var k;
  15.  
    if (n >= 0) {
  16.  
    k = n;
  17.  
    } else {
  18.  
    k = len + n;
  19.  
    if (k < 0) {k = 0;}
  20.  
    }
  21.  
    var currentElement;
  22.  
    while (k < len) {
  23.  
    currentElement = O[k];
  24.  
    if (searchElement === currentElement ||
  25.  
    (searchElement !== searchElement && currentElement !== currentElement)) { // NaN !== NaN
  26.  
    return true;
  27.  
    }
  28.  
    k++;
  29.  
    }
  30.  
    return false;
  31.  
    };
  32.  
    }

indexOf语法

arr.indexOf(searchElement[, fromIndex = 0])

实例

  1.  
    var array = [2, 9, 9];
  2.  
    array.indexOf(2); // 0
  3.  
    array.indexOf(7); // -1
  4.  
    array.indexOf(9, 2); // 2
  5.  
    array.indexOf(2, -1); // -1
  6.  
    array.indexOf(2, -3); // 0

查找元素的所有出现

  1.  
    var indices = [];
  2.  
    var array = ['a', 'b', 'a', 'c', 'a', 'd'];
  3.  
    var element = 'a';
  4.  
    var idx = array.indexOf(element);
  5.  
    while (idx != -1) {
  6.  
    indices.push(idx);
  7.  
    idx = array.indexOf(element, idx + 1);
  8.  
    }
  9.  
    console.log(indices);
  10.  
    // [0, 2, 4]

查找数组中是否存在元素并更新数组

  1.  
    function updateVegetablesCollection (veggies, veggie) {
  2.  
    if (veggies.indexOf(veggie) === -1) {
  3.  
    veggies.push(veggie);
  4.  
    console.log('New veggies collection is : ' + veggies);
  5.  
    } else if (veggies.indexOf(veggie) > -1) {
  6.  
    console.log(veggie + ' already exists in the veggies collection.');
  7.  
    }
  8.  
    }
  9.  
     
  10.  
    var veggies = ['potato', 'tomato', 'chillies', 'green-pepper'];
  11.  
     
  12.  
    updateVegetablesCollection(veggies, 'spinach');
  13.  
    // New veggies collection is : potato,tomato,chillies,green-papper,spinach
  14.  
    updateVegetablesCollection(veggies, 'spinach');
  15.  
    // spinach already exists in the veggies collection.

源码

    1.  
      // Production steps of ECMA-262, Edition 5, 15.4.4.14
    2.  
      // Reference: http://es5.github.io/#x15.4.4.14
    3.  
      if (!Array.prototype.indexOf) {
    4.  
      Array.prototype.indexOf = function(searchElement, fromIndex) {
    5.  
       
    6.  
      var k;
    7.  
       
    8.  
      // 1. Let o be the result of calling ToObject passing
    9.  
      // the this value as the argument.
    10.  
      if (this == null) {
    11.  
      throw new TypeError('"this" is null or not defined');
    12.  
      }
    13.  
       
    14.  
      var o = Object(this);
    15.  
       
    16.  
      // 2. Let lenValue be the result of calling the Get
    17.  
      // internal method of o with the argument "length".
    18.  
      // 3. Let len be ToUint32(lenValue).
    19.  
      var len = o.length >>> 0;
    20.  
       
    21.  
      // 4. If len is 0, return -1.
    22.  
      if (len === 0) {
    23.  
      return -1;
    24.  
      }
    25.  
       
    26.  
      // 5. If argument fromIndex was passed let n be
    27.  
      // ToInteger(fromIndex); else let n be 0.
    28.  
      var n = +fromIndex || 0;
    29.  
       
    30.  
      if (Math.abs(n) === Infinity) {
    31.  
      n = 0;
    32.  
      }
    33.  
       
    34.  
      // 6. If n >= len, return -1.
    35.  
      if (n >= len) {
    36.  
      return -1;
    37.  
      }
    38.  
       
    39.  
      // 7. If n >= 0, then Let k be n.
    40.  
      // 8. Else, n<0, Let k be len - abs(n).
    41.  
      // If k is less than 0, then let k be 0.
    42.  
      k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
    43.  
       
    44.  
      // 9. Repeat, while k < len
    45.  
      while (k < len) {
    46.  
      // a. Let Pk be ToString(k).
    47.  
      // This is implicit for LHS operands of the in operator
    48.  
      // b. Let kPresent be the result of calling the
    49.  
      // HasProperty internal method of o with argument Pk.
    50.  
      // This step can be combined with c
    51.  
      // c. If kPresent is true, then
    52.  
      // i. Let elementK be the result of calling the Get
    53.  
      // internal method of o with the argument ToString(k).
    54.  
      // ii. Let same be the result of applying the
    55.  
      // Strict Equality Comparison Algorithm to
    56.  
      // searchElement and elementK.
    57.  
      // iii. If same is true, return k.
    58.  
      if (k in o && o[k] === searchElement) {
    59.  
      return k;
    60.  
      }
    61.  
      k++;
    62.  
      }
    63.  
      return -1;
    64.  
      };
    65.  
      }

from、includes、indexOf的更多相关文章

  1. rails 中 preload、includes、Eager load、Joins 的区别

    Rails 提供了四种不同加载关联数据的方法.下面就来介绍一下. 一.Preload Preload 是以附加一条查询语句来加载关联数据的 User.preload(:posts).to_a # =& ...

  2. indexOf()、includes()、startsWith()、endsWith()

    是否包含字符串三种新方法 传统上,JavaScript只有 indexOf 方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法. includes():返回布尔值,表示是否 ...

  3. find、findIndex、indexOf、lastIndex、includes 数组五种查询条件方法介绍

    find() 方法返回数组中满足提供的测试函数的第一个元素的值. 语法: arr.find(callback[, thisArg]) findIndex()方法返回数组中满足提供的测试函数的第一个元素 ...

  4. JavaScript数组方法--includes、indexOf、lastIndexOf

    我们继续吧! includes:includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false.还是先看看includes的用法吧 var ar ...

  5. indexOf、instanceOf、typeOf、valueOf详解

    1.indexOf() 该方法用来返回某个指定的字符串值在字符串中首次出现的位置. 语法:indexOf(searchvalue,fromindex);两个参数,参数一表示查询的字符串值,参数二可选表 ...

  6. js字符串函数(split、join、indexOf、substring)

    1,函数:split()功能:使用一个指定的分隔符把一个字符串分割存储到数组示例: str="jpg|bmp|gif|ico|png";arr= str .split(" ...

  7. JS数组filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()实例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  8. JavaScript数组方法的兼容性写法 汇总:indexOf()、forEach()、map()、filter()、some()、every()

    ECMA Script5中数组方法如indexOf().forEach().map().filter().some()并不支持IE6-8,但是国内依然有一大部分用户使用IE6-8,而以上数组方法又确实 ...

  9. js中的slice()、substring()、substr()、split()、join()、indexof()

    在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧 ...

随机推荐

  1. Python 爬虫 校花网

    爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 福利来了  校花网 ,首先说为什么要爬这个网站呢,第一这个网站简单爬起来容易,不会受到打击,第二呢 你懂得.... 1.第一步,需要下 ...

  2. Sublime Text插件安装方法和常用插件

    插件安装方法: 1.打开Sublime Text,按下Ctrl+Shift+P调出命令面板 ; 2.输入install 调出 Install Package Control选项并回车; 3.再次按下C ...

  3. Scala本地安装

    一.下载 https://www.scala-lang.org/download/ 这里我选择Scala2.10.4版本 二.安装 安装比较简单  和jdk类似 点击一路安装: 选择自己的路径 完成 ...

  4. jquery 使用a标签导航栏跳转页面,动态添加高亮

    众所周知,使用a标签跳转之后,会刷新一次,继而这个添加的样式就会消失.那么怎么解决这一问题呢? <script> $(function () { $('.bar a').each(func ...

  5. python 安装opencv及问题解决

    正常安装模式 pip install opencv-python==3.4.5.20 pip install opencv-contrib-python==3.4.5.20 -i http://pyp ...

  6. python 简易小爬虫

    此脚本用于爬站点的下载链接,最终输出到txt文档中. 如果是没有防盗链设置的站点,也可以使用脚本中的下载函数尝试直接下载. 本脚本是为了短期特定目标设计的,如果使用它爬其它特征的资源链接需自行修改配置 ...

  7. Django集合Ueditor

    语言版本环境:python3.6 1.win安装步骤: git下载源码https://github.com/zhangfisher/DjangoUeditor 解压DjangoUeditor3-mas ...

  8. Airbnb JavaScript 编码风格指南(2018年最新版)

    原网址 :  https://segmentfault.com/a/1190000013040555 类型 基本类型:直接存取 string number boolean null undefined ...

  9. css定位选择兄弟元素,nth-of-type

    <span class="input-group-btn" the-id="num-change"> <button class=" ...

  10. sys模块 json pickle模块

    # sys模块# import sys# sys.path# sys.argv# sys.exit() # 脚本退出# print('[%s]'%('#'*1))# print('[%s]'%('#' ...