zoukankan      html  css  js  c++  java
  • 数组的一些与遍历相关的方法总结

    Array.prototypr.every():为数组中的每一个元素执行一次callback函数,直到它找到一个使callback返回false的元素。

      如果找到一个这样的元素,every方法会立即返回false,否则会为每一个元素返回true,every也会返回true。callback被调用时传入三个参数:元素值,元素的索引,原数组。callback只会为那些已经被赋值的索引调用,不会为那些被删除或从来没被赋值的索引调用。every不会改变原数组。空数组返回true。
      语法:arr.every(callback[, thisArg])

    function isBigEnough(element, index, array) {
      return (element >= 10);
    }
    var passed = [12, 5, 8, 130, 44].every(isBigEnough);
    // passed is false
    passed = [12, 54, 18, 130, 44].every(isBigEnough);
    // passed is true
    

      

    Array.prototype.filter():创建一个新数组,其包含通过所提供函数实现的测试的所有元素。

      语法:var new_array = arr.filter(callback[, thisArg])

    function isBigEnough(value) {
    return value >= 10;
    }
    
    var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
    
    // filtered is [12, 130, 44]
    
    // ES6 way
    
    const isBigEnough = value => value >= 10;
    
    let [...spread]= [12, 5, 8, 130, 44];
    
    let filtered = spread.filter(isBigEnough);
    
    // filtered is [12, 130, 44] 

      filter为数组中的每个元素调用一次callback函数,并利用所有使得callback返回true或等价于true的值的元素创建一个新数组。callback只会在已经赋值的索引上被调用,对于那些已经被删除或者从来未被赋值的索引不会被调用。那些没有通过callback测试的元素会被跳过,不会包含在新数组中。filter 不会改变原数组,它返回过滤后的新数组。

    Array.prototype.forEach():对数组的每个元素执行一次提供的函数。该方法没有返回一个新数组,也没有返回值!
      语法:

    array.forEach(callback(currentValue, index, array){
      //do something
    }, this)
    //或
    array.forEach(callback[, thisArg])

      Eg:

    const arr = ['a', 'b', 'c'];
    
    arr.forEach(function(element) {
      console.log(element);
    });
    
    
    arr.forEach( element => console.log(element));
    
    // a
    // b
    // c

      forEach方法按升序为数组中含有效值的每一项执行一次callback函数,那些已删除或者未初始化的项将被跳过(但不包含值为undefined的项)。没有办法终止或跳出forEach循环,除了抛出一个异常。
      如果数组在迭代时被修改了,则其它元素会被跳过:

    var words = ["one", "two", "three", "four"];
    words.forEach(function(word) {
    console.log(word);
    console.log(words);
    if (word === "two") {
      words.shift();
    }
    });
    // one
    // ["one", "two", "three", "four"]
    // two
    // ["one", "two", "three", "four"]
    // four
    // ["two", "three", "four"]
    //"one"被删除后,后面的元素向前移动一位,"three"移到"two"的位置上,而"two"位置已经被迭代过了,所以会跳过"three"。

    Array.prototype.map():创建一个新数组,其结果是该数组中的每个元素都调用一个函数后返回的结果。
      语法:

    let new_array = arr.map(function callback(currentValue, index, array) { 
      // Return element for new_array 
    }[, thisArg])
    

      Eg:

    // ES6
    let numbers = [1, 5, 10, 15];
    let doubles = numbers.map( x => x ** 2);
    
    // doubles is now [1, 25, 100, 225]
    // numbers is still [1, 5, 10, 15]
    
    let numbers = [1, 4, 9];
    let roots = numbers.map(Math.sqrt);
    // roots is now [1, 2, 3]
    // numbers is still [1, 4, 9]
    

      map方法会给原数组中的每个元素都按顺序调用一次callback函数。callback每次执行后的返回值(包括undefined)组合起来形成一个新数组。callback函数只会在有值的索引上被调用,那些从来没被赋过值或者使用delete删除的索引则不会被调用。

    Array.prototype.reduce():reduce()方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。

    var sum = [0, 1, 2, 3].reduce(function (a, b) {
    return a + b;
    }, 0);
    // sum is 6
    //ES6 var total = [ 0, 1, 2, 3 ].reduce( ( acc, cur ) => acc + cur, 0 );

    Array.prototype.some():some() 方法测试数组中的某些元素是否通过由提供的函数实现的测试。
      some 为数组中的每一个元素执行一次 callback 函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some 将会立即返回 true。否则,some 返回 false。callback 只会在那些”有值“的索引上被调用,不会在那些被删除或从来未被赋值的索引上调用。与Array.prototypr.every()是相对的,参考Array.prototypr.every()即可。

  • 相关阅读:
    GET or POST?
    ASP.NET AJAX简述
    C# 后台调用存储过程
    S,C,SC,表
    js判定浏览器的种类
    sql 数据表添加或删除或修改字段 alter
    sql判定数据表是否存在,存在删除,再新建表或修改表名
    sql 所有的表建好后,为表添加外键约束
    打开office弹出steup error 的解决办法
    a标签的属性
  • 原文地址:https://www.cnblogs.com/zhengxj1991/p/9100470.html
Copyright © 2011-2022 走看看