JS数组的方法们

作者: 北辰_狼月 | 来源:发表于2019-10-24 23:03 被阅读0次

    数组作为一个经常出现的数据结构,想必每个开发人员都不会陌生。但是,你真的对它熟悉么?这里得打个问号。在开发过程中,我们最常用的就是for,不可否认它的效率确实很高,也能实现各种复杂的操作。但是,有些情况,我们使用其他的方法,更能让我们事半功倍。下面我们就来搜罗一下常用的方法,给大家提供更多的选择。
    先看一张图,了解一下,这次要说的内容。

    image.png

    1. for

    普通for循环,数组届扛把子,也是我们用到最多的方法,许多比较循环效率的文章里,都提到了它的效率,是最高的。

    优点: 效率高,可用break终止
    缺点:写起来繁琐

    实例:

    for (var i=0; i<5; i++)
    {
          x=x + "该数字为 " + i + "<br>";
          if(i === 3){
              break;
          }
    }
    

    2. forEach

    对数组的每个元素执行一次提供的函数。

    特点:返回undefined,无法终止循环,写起来方便

    实例:

    var array1 = ['a', 'b', 'c'];
    
    array1.forEach(function(element) {
      console.log(element);
    });
    
    // expected output: "a"
    // expected output: "b"
    // expected output: "c"
    

    3. for...in循环

    对数组和对象的属性进行遍历

    特点: 会遍历出原型链上的属性

    实例:

        var x;
        var txt="";
        var person={fname:"Bill",lname:"Gates",age:56}; 
        for (x in person){
            txt=txt + person[x];
        }
    

    4.for...of循环

    es6提供的循环方法,可循环包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、 Generator 对象,以及字符串。

    特点:无返回值,可用break终止,写起来方便

    可以说for of综合了forforeachfor...in的优势,所以后续更推荐使用此方法遍历数组。
    实例:

    const arr = ['red', 'green', 'blue'];
    
    for(let v of arr) {
      console.log(v); // red green blue
    }
    

    5. from

    从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例

    特点: 将两类对象转为真正的数组,并返回

    实例:

    let arrayLike = {
        '0': 'a',
        '1': 'b',
        '2': 'c',
        length: 3
    };
    let arr1 = Array.from(arrayLike); // ['a', 'b', 'c']
    

    6.every

    测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。
    我们可以很方便地用它判断每个元素是否满足条件,而不用很辛苦地在for循环里写if语句。
    实例:

    function isBelowThreshold(currentValue) {
      return currentValue < 40;
    }
    
    var array1 = [1, 30, 39, 29, 10, 13];
    
    console.log(array1.every(isBelowThreshold));
    // expected output: true
    

    7.some

    测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。
    与every类似,与之相反。
    实例:

    var array = [1, 2, 3, 4, 5];
    
    var even = function(element) {
      // checks whether an element is even
      return element % 2 === 0;
    };
    
    console.log(array.some(even));
    // expected output: true
    

    8.filter

    创建一个新数组, 其包含通过所提供函数实现的测试的所有元素
    可以很方便我们筛选出符合条件的元素。

    特点:返回新数组

    实例:

    var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
    
    const result = words.filter(word => word.length > 6);
    
    console.log(result);
    // expected output: Array ["exuberant", "destruction", "present"]
    

    9.map

    创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。

    特点: 返回新数组

    var array1 = [1, 4, 9, 16];
    
    // pass a function to map
    const map1 = array1.map(x => x * 2);
    
    console.log(map1);
    // expected output: Array [2, 8, 18, 32]
    

    10.reduce

    方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
    可以方便我们计算数组的和
    实例:

    const array1 = [1, 2, 3, 4];
    const reducer = (accumulator, currentValue) => accumulator + currentValue;
    
    // 1 + 2 + 3 + 4
    console.log(array1.reduce(reducer));
    // expected output: 10
    

    11.find

    返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined
    实例:

    var array1 = [5, 12, 8, 130, 44];
    
    var found = array1.find(function(element) {
      return element > 10;
    });
    
    console.log(found);
    // expected output: 12
    

    12.findIndex

    返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1
    实例:

    var array1 = [5, 12, 8, 130, 44];
    
    function isLargeNumber(element) {
      return element > 13;
    }
    
    console.log(array1.findIndex(isLargeNumber));
    // expected output: 3
    

    至此,总结完毕。希望大家灵活运用,让自己的代码更优雅。

    相关文章

      网友评论

        本文标题:JS数组的方法们

        本文链接:https://www.haomeiwen.com/subject/kuflvctx.html