數組遍歷方法總結

在網上找了好久,沒有很全面的,老是缺幾個,索性本身查一查資料總結一會兒javascript

1.1 for 循環

不過多解釋,你們都懂html

實例:java

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9]
    for (let i = 0;i < arr.length;i++) {
      console.log(arr[i]);
    }
  </script>

輸出效果:數組

for循環優化 :讓arr.length只獲取一次,不重複獲取。函數

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9]
    for (let i = 0,len = arr.length;i < len;i++) {
      console.log(arr[i]);
    }
  </script>

1.2 forEach

由數組繼承的Array對象的原型方法,在參數中可添加回調函數,回調函數可添加一個或多個參數。優化

參數包括:ui

  • currentValue3d

    數組中正在處理的當前元素。code

  • index可選htm

    數組中正在處理的當前元素的索引。

  • array可選

    forEach() 方法正在操做的數組。

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9]
    arr.forEach(currentValue => {
      console.log(currentValue);
    });
  </script>

輸出:

通常工做中都只加前面兩個參數,就是當前值和索引兩個參數

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9]
    arr.forEach((element, index) => {
      console.log('第' + index + '個數值爲:' + element);
    });
  </script>

輸出

注意點:

forEach不會改變數組自己的值,由於他每次回調函數返回的都是undefined,並且他不能被鏈式調用,可是不排除在回調函數裏改變數組自己的值。最明顯的例子就是forEach不能像是Map同樣return改變數組自己的值。

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9]
    var arr2 = arr.forEach((element, index) => {
      console.log('第' + index + '個數值爲:' + element);
      return element * 2;
    });
    console.log(arr2);
  </script>

輸出:

另一個注意點:

就是forEach一旦開始沒法使用return或者break來終止循環或者跳出循環。

這個就不上例子了,很好理解。

1.3 map

由數組繼承的Array對象的原型方法,在參數中可添加回調函數,回調函數可添加一個或多個參數。

參數包括:

  • currentValue

    數組中正在處理的當前元素。

  • index可選

    數組中正在處理的當前元素的索引。

  • array可選

    forEach() 方法正在操做的數組。

和forEach最大的區別就是map能夠經過return能夠改變輸出值,可是不改變原數組值,而非單純的遍歷

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9];
    const arr2 = arr.map(element => element * 2);
    console.log(arr);
    console.log(arr2);
  </script>

輸出:

1.4 for-of

for-of能夠迭代不少東西,包括包括 [Array],[Map],[Set],[String],[TypedArray]對象等等。在這裏只解釋一下在數組中的迭代。

for (variable of iterable) {
    //statements
}

variable是在每次迭代中,將不一樣屬性的值分配給變量。

iterable是被迭代枚舉其屬性的對象。

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9];
    for (value of arr) {
      console.log(value);
    }
  </script>

輸出:

與forEach的不一樣點就是支持return break和continue等操做。

1.5 for-in

For-in 在數組遍歷的時候與for -of不一樣的是他遍歷枚舉屬性,而像數組的值不是可枚舉屬性。能夠說for-in不是合適的遍歷數組的方法。

舉個簡單的例子,這篇就不涉及for-in和for-of的更詳細的內容了,只須要知道for-in是遍歷枚舉屬性的方法,他不適合遍歷數組就OK了。
for-in 和 for-of和枚舉屬性等概念在這裏:http://www.javashuo.com/article/p-chhvqnmq-mx.html

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9];
    for (value in arr) {
      console.log(value);
    }
  </script>

輸出:

因此輸出的都是枚舉屬性,不會輸出具體的值。

1.6 find 和 findIndex

準確的說find不是遍歷數組的,而是尋找數組中的具體的值的做返回的一個方法。他和findIndex很是相像,findIndex是返回具體的索引的。

他是由數組繼承的Array對象的原型方法,因此直接在數組上調用,他的方法體內須要一個回調函數,在數組每一項上執行的函數,接收 3 個參數:

  • element

    當前遍歷到的元素。

  • index可選

    當前遍歷到的索引。

  • array可選

    數組自己。

他的返回值能夠是具體的值,或者undefined(沒有找到符合要求的元素)

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9];
    const res = arr.find(element => element > 3)
    console.log(res);
  </script>

輸出:4

因此說他不會返回具體一個數組,而是返回下一個的值。

findIndex同理:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9];
    const res = arr.findIndex(element => element > 3)
    console.log(res);
  </script>

輸出:3(PS:由於元素4在索引3上。這裏的3不是指3這個值)

1.7 filter

這個準確的說也不是用來遍歷的,顧名思義,它是用來篩選數組的。一樣,它裏面放一個回調函數,函數裏面放三個參數

  • element

    數組中當前正在處理的元素。

  • index可選

    正在處理的元素在數組中的索引。

  • array可選

    調用了 filter 的數組自己。

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9];
    const res = arr.filter(element => element > 3)
    console.log(res);
  </script>

輸出:

須要強調的是filter是經過回調函數返回的true或者false來返回不一樣的值來組成數組的。並且他不會改變原有的數組。

1.8 some 和 every

some和every遍歷數組的每一個值而後返回一個布爾值。若是每一個值運行回調函數都返回true或者都返回false,every會返回true或者false;若是有一個返回true,some會返回true,若是全部返回false則some會返回false。它們裏面放的這個回調函數裏面能夠放三個參數:

  • element

    數組中當前正在處理的元素。

  • index可選

    正在處理的元素在數組中的索引。

  • array可選

    調用了 filter 的數組自己。

實例:

<script>
    var arr = [1, 2, 3, 4, 7, 8, 9];
    let res = arr.some(element => element > 10)
    console.log(res);
    res = arr.some(element => element > 8)
    console.log(res);
    res = arr.some(element => element < 10)
    console.log(res);
    res = arr.every(element => element > 3)
    console.log(res);
    res = arr.every(element => element > 0)
    console.log(res);
  </script>

輸出:

1.9 reduce

reduce()方法接收一個函數做爲累加器(accumulator),數組中的每一個值(從左到右)開始合併,最終爲一個值.
回調函數執行數組中每一個值的函數(也能夠叫作reducer),包含4個參數.

  • previousValue

    上一次調用回調返回的值,或者是提供的初始值(initialValue)

  • currentValue

    數組中當前被處理的元素

  • index

    當前元素在數組中的索引

  • array

    調用reduce的數組

實例:

<script>
    var arrString = 'abcdaabc'
    // 獲取字符中中每一個字母出現的次數
    let count = arrString.split('').reduce(function (res, cur) {
      res[cur] ? res[cur]++ : res[cur] = 1
      return res
    }, {})
    console.log(count)
  </script>

輸出:

僅是本身總結,要了解全面的話仍是須要去查文檔,推薦MDN上仔細閱讀文檔:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

相關文章
相關標籤/搜索