數組遍歷方法總結

来源:https://www.cnblogs.com/wangzirui98/archive/2019/07/22/11226781.html
-Advertisement-
Play Games

在網上找了很久,沒有很全面的,總是缺幾個,索性自己查一查資料總結一下子 1.1 for 迴圈 不過多解釋,大家都懂 實例: 輸出效果: for迴圈優化 :讓arr.length只獲取一次,不重覆獲取。 1.2 forEach 由數組繼承的Array對象的原型方法,在參數中可添加回調函數,回調函數可添 ...


在網上找了很久,沒有很全面的,總是缺幾個,索性自己查一查資料總結一下子

1.1 for 迴圈

不過多解釋,大家都懂

實例:

  <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對象的原型方法,在參數中可添加回調函數,回調函數可添加一個或多個參數。

參數包括:

  • currentValue

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

  • index可選

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

  • 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和枚舉屬性等概念在這裡:https://www.cnblogs.com/wangzirui98/p/11227853.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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、HTTP協議概述 HTTP是一個簡單的請求-響應協議,屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分散式超媒體信息系統。它通常運行在TCP之上。它指定了客戶端發送給伺服器什麼樣的消息得到什麼樣的響應。 二、HTTP協議的主要特點可概括如下: 1.B/S結構(Browser/Serv ...
  • *在js中不同類型之間的運算,所得到結果的類型也會有所變化: string + number = string string + boolean = string string + undefiend = string number + boolean = number number + undef ...
  • 概念 單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。 核心:確保只有一個實例,並提供全局訪問。 實現思路 一個類能返回對象一個引用(永遠是同一個)和一個獲得該實例的方法(必須是靜態方法,通常命名為 );當我們調用這個方法時,類持有的引用不為 ...
  • 1.MVVM和MVC的區別: MVVM:是Model-View-ViewModel的簡寫,即模型-視圖-視圖模型 模型:後端傳遞的數據 試圖:所看到的頁面 視圖模型:mvvm模式的核心,它是連接view和model的橋梁。 兩個實現方向: 1)模型 》視圖:後端傳遞的數據轉化成所看到的頁面,實現方式 ...
  • 購物車之進階版 ...
  • 首先要分清什麼是可枚舉屬性,什麼是不可枚舉屬性 1.可枚舉屬性 在JavaScript中,對象的屬性分為可枚舉和不可枚舉之分,它們是由屬性的enumerable值決定的。可枚舉性決定了這個屬性能否被for…in查找遍歷到。 1.1怎麼判斷屬性是否可枚舉 js中基本包裝類型的原型屬性是不可枚舉的 ,如 ...
  • "demo 代碼點此" ,開始之前,先做點準備工作。 準備工作 準備一個空文件夾,然後執行下列命令: 然後創建一個 dist 目錄,併在裡面創建一個 indedx.html: 接著創建一個 src 目錄,在裡面創建一個 lib 文件夾,創建一個 until.js: 再創建 components 文件 ...
  • 惠善一的博客:https://huishanyi.club  模塊式開發貫穿著整個NodeJS項目,那麼,模塊是什麼?模塊相當於一個最小的功能塊,在NodeJS項目中,一個JS文件就為一個模塊。   模塊開發有何好處? 1.維護快穩準:隨著項目的進行,代碼量增大,導致了後期維護極其困難,而使用模... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...