JavaScript數組方法--filter、find、findIndex


繼續數組方法,今天應該到filter了。

  • filter:filter() 方法創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。 
    使用:
    var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
    const result = words.filter(word => word.length > 6);
    console.log(result);  
    僅僅從字面理解一下filter,就是過濾,怎么過濾呢?通過給定一個回調函數,過濾出來符合函數實現的元素。
    從示例中看,也就是說,需要過濾出來元素的單詞長度大於6的所有元素。
    查看一下結果呢!

    語法:

    var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
    

      filter有兩個參數,第一個就是回調函數,第二個參數與之前我們說到的some、every啊類似,基本上就就是數組函數只要提供了回調函數,都會有這么一個用於執行callback回調的this值。
      回調函數也是三個參數,就沒什么可說的了,數組函數的所有回調函數都是這三個參數:元素element、索引index、數組本身array。
    來吧,開始重構:

    function filter(arr, fn, thisArg) {
      if (!(arr instanceof Array)) throw new Error("請確保第一個參數類型為數組")
      var results = []
      for (var i = 0; i < arr.length; i++) {
        if (fn.call(thisArg, arr[i], i, arr))
          results[results.length] = arr[i]
      }
      return results
    }
    

      是不是也真的沒什么好神奇的?

  • find:find() 方法返回數組中滿足提供的測試函數的第一個元素的值。否則返回 undefined
    使用:
    var array1 = [5, 12, 8, 130, 44];
    var found = array1.find(function(element) {
      return element > 10;
    });
    console.log(found);
    結果:

    其實依據我們之前介紹其他的數組方法所說的,很容易理解到,find方法也是提供一個回調函數,那么必然也有一個可選的用於回調函數的this值,他查找並返回的是第一個符合回調函數測試結果的元素。其他的並沒有什么特殊之處。

    function find(arr, fn, thisArg) {
      if (!(arr instanceof Array)) throw new Error("請確保第一個參數類型為數組")
      for (var i = 0; i < arr.length; i++) {
        if (fn.call(thisArg, arr[i], i, arr)) {
          return arr[i]
        }
      }
      return undefined
    }  

      說到這里,自然而然的可以預料到,下一個函數必然是findIndex了,從字面上就可以理解到findIndex是干什么的了!而且有find在前,findIndex也真的沒什么好說的了。

  • findIndex:findIndex()方法返回數組中滿足提供的測試函數的第一個元素的索引。否則返回-1。
    簡單說一下,find返回的是數組符合回調測試條件的第一個元素,findIndex返回的是符合回調測試條件的第一個元素的索引。
    function findIndex(arr, fn, thisArg) {
      if (!(arr instanceof Array)) throw new Error("請確保第一個參數類型為數組")
      for (var i = 0; i < arr.length; i++) {
        if (fn(thisArg, arr[i], i, arr)) {
          return i 
        }
      }
      return -1
    }
    

      看這兩個重構的函數都沒有他打區別,也就是一個元素,一個索引值而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM