zoukankan      html  css  js  c++  java
  • JavaScript Array对象之ES5、ES6新增方法

    上一篇我写了Array数组对象的一些基本方法,这次总结些关于ES5、ES6新增的数组对象的方法。

    一、ES5新增数组方法(IE9+支持)

    1.1索引方法

    indexOf():返回要查找数值在数组中的索引值,从前往后查找,找不到返回-1
    lastIndexOf():从后面往前找,但索引值不变。
    语法格式: indexOf / lastIndexOf(要查找的项,查找起点索引)。

                var a = [2, 9, 5,44,88,9,32];
                console.log(a.indexOf(2)); // 0
                console.log(a.indexOf(7)); // -1
                console.log(a.lastIndexOf(2));//0
                console.log(a.lastIndexOf(7));//-1
                console.log(a.lastIndexOf(9,3));//1
                console.log(a.lastIndexOf(9,5));//5

    1.2数组迭代方法

    ECMAScript 5 为数组定义了 5 个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响 this 的值。
      传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置、数组对象本身。

    1.2.1 forEach(fn):用于替代for循环,比for循环简便,但不能随意退出,不能使用break。此方法没有返回值。

                const items = ['item1', 'item2', 'item3'];
                const copy = [];    
                items.forEach(function(item){
                  copy.push(item)
                });
                console.log(copy);//["item1", "item2", "item3"]        

    1.2.3 map(fn):返回的是一个数量相等的新数组,返回的内容是什么取决于在fn中返回的值。

    var numbers = [1, 5, 10, 15];
    var doubles = numbers.map(function(x) {
       return x * 2;
    });
    console.log(doubles);// [2, 10, 20, 30]

    1.2.3 filter(fn): 得到执行fn后返回时true对应的数组元素组成的数组,利用这个方法对数组元素进行筛选。

            var words = ["spray", "limit", "elite", "exuberant", "destruction", "present", "happy"];
    
            var longWords = words.filter(function(word){
              return word.length > 6;
            });
            
            console.log(longWords);//["exuberant", "destruction", "present"]

    1.2.4 some(fn):如果该函数对任何一项返回ture,则返回ture。-->用于判断数组是否存在某个属性值/对象等(indexOf有局限性)

            var aa=[2,5,8,4];
            var  bb=[11,3,6,8];
            var cc=aa.some(function(item){
                return item >10;
            });
            var dd=bb.some(function(item){
                return item >10;
            })
            console.log(cc);//false
            console.log(dd);//true

    1.2.5 every(fn):执行函数时,所有元素都返回ture,则返回ture。

            var aa=[2,5,8,4];
            var  bb=[11,3,6,8];
            var cc=aa.every(function(item){
                return item <10;
            });
            var dd=bb.every(function(item){
                return item <10;
            })
            console.log(cc);//true
            console.log(dd);//false

    二、ES6新增新操作数组的方法

    2.1  find();传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它,并且终止搜索。

          findIndex();传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它的下标,终止搜索。

    const arr = [1, "2", 3, 3, "2"]
    console.log(arr.find(n => typeof n === "number")) // 1
    
    const arr1 = [1, "2", 3, 3, "2"]
    console.log(arr1.findIndex(n => typeof n === "number")) // 0

    2.2 fill();

    用新元素替换掉数组内的元素,可以指定替换下标范围。

    格式:arr.fill(value, start, end)

    const arr2=[1,2,3,4];
    console.log(arr2.fill(5));//[5, 5, 5, 5],默认所有元素替换
    const arr3=[1,2,3,4];
    console.log(arr3.fill(6,1,5));//[1, 6, 6, 6],新元素6替换在索引值为1到5之间的所有元素

    2.3 copyWithin()

    选择数组的某个下标,从该位置开始复制数组元素,默认从0开始复制。也可以指定要复制的元素范围。

    格式:arr.copyWithin(被替换的起始位置,选取替换值的起始位置,选取替换值的结束位置)

    let arr4 = [1, 'c', 'd', 'a', 'b'];  
    console.log(arr4.copyWithin(0, 3, 5))   // ["a", "b", "d", "a", "b"]

    2.4 Array.from()

    将类似数组的对象(array-like object)和可遍历(iterable)的对象转为真正的数组

    const bar = ["a", "b", "c"];
    console.log(Array.from(bar));// ["a", "b", "c"]

    2. 5 Array.of();用于将一组值,转换为数组

    Array(3, 11, 8) // [3, 11, 8]
    Array.of(7);       // [7]
    Array.of(1, 2, 3); // [1, 2, 3]

    2.6 entries() 返回迭代器:返回键值对

    //数组
    const arr = ['a', 'b', 'c'];
    for(let v of arr.entries()) {
      console.log(v)
    }
    // [0, 'a'] [1, 'b'] [2, 'c']
    
    //Set
    const arr = new Set(['a', 'b', 'c']);
    for(let v of arr.entries()) {
      console.log(v)
    }
    // ['a', 'a'] ['b', 'b'] ['c', 'c']
    
    //Map
    const arr = new Map();
    arr.set('a', 'a');
    arr.set('b', 'b');
    for(let v of arr.entries()) {
      console.log(v)
    }
    // ['a', 'a'] ['b', 'b'

    2.7values() 返回迭代器:返回键值对的value;

    keys() 返回迭代器:返回键值对的key

    const arr = ['a', 'b', 'c'];
    for(let v of arr.values()) {
      console.log(v)
    }
    //'a' 'b' 'c'


    const arr = ['a', 'b', 'c'];
    for(let v of arr.keys()) {
    console.log(v)
    }
    // 0 1 2

     

    2.8 includes()

    判断数组中是否存在该元素,参数:查找的值、起始位置,可以替换 ES5 时代的 indexOf 判断方式。indexOf 判断元素是否为 NaN,会判断错误。

    var a = [1, 2, 3];
    console.log(a.includes(2)); // true
    console.log(a.includes(4)); // false
  • 相关阅读:
    仿MSN小类别滑动效果
    pku1674 Sorting by Swapping
    pku1456 Supermarket
    pku1083 Moving Tables
    pku1125 Stockbroker Grapevine
    pku2232 New StoneForfexCloth Game
    如何低头前进
    和两年前一样
    股票亏了
    早上选举了
  • 原文地址:https://www.cnblogs.com/smile-xin/p/11452090.html
Copyright © 2011-2022 走看看