js數組中的find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()方法的詳解和應用實例

来源:https://www.cnblogs.com/sgs123/archive/2019/04/29/10790973.html
-Advertisement-
Play Games

1. find()與findIndex()    find()方法,用於找出第一個符合條件的數組成員。它的參數是一個回調函數,所有數組成員依次執行該回調函數,直到找出第一個返回值為true的成員,然後返回該成員。如果沒有符合條件的成員,則返回undefined。 [1, 2, 5 ...


1. find()與findIndex()

   find()方法,用於找出第一個符合條件的數組成員。它的參數是一個回調函數,所有數組成員依次執行該回調函數,直到找出第一個返回值為true的成員,然後返回該成員。如果沒有符合條件的成員,則返回undefined。

  1. [1, 2, 5, -1, 9].find((n) => n < 0)
  2. //找出數組中第一個小於 0 的成員
  3. // -1

  find()方法的回調函數可以接受三個參數,依次為當前的值、當前的位置和原數組。

  findIndex()方法的用法與find()方法非常類似,返回第一個符合條件的數組成員的位置,如果所有成員都不符合條件,則返回-1。

  1. [1, 2, 5, -1, 9].findIndex((n) => n < 0)
  2. //返回符合條件的值的位置(索引)
  3. // 3

2. filter()

filter()方法使用指定的函數測試所有元素,並創建一個包含所有通過測試的元素的新數組。

filter 為數組中的每個元素調用一次 callback 函數,並利用所有使得 callback 返回 true 或 等價於 true 的值 的元素創建一個新數組。那些沒有通過 callback 測試的元素會被跳過,不會被包含在新數組中。filter 不會改變原數組。

  1. var arr = [10, 20, 30, 40, 50]
  2. var newArr = arr.filter(item => item > 30);
  3. console.log(newArr); //[40, 50]
  1. //數組去重
  2. var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 0, 8, 6, 3, 4, 56, 2];
  3. var arr2 = arr.filter((x, index,self)=>self.indexOf(x) === index)
  4. console.log(arr2); // [1, 2, 3, 4, 5, 6, 7, 8, 0, 56]

3. forEach()

  遍曆數組全部元素,利用回調函數對數組進行操作,自動遍歷整個數組,且無法break中途跳出迴圈,不可控,不支持return操作輸出,return只用於控制迴圈是否跳出當前迴圈。

  回調有三個參數:第一個參數是遍歷的數組內容,第二個參數是對應的數組索引,第三個參數是數組本身。

  1. var arr = [1,2,3,4,5,] ;
  2. arr.forEach(function(item,index){
  3. console.log(item);
  4. });

  這個方法是沒有返回值的,僅僅是遍曆數組中的每一項,不對原來數組進行修改;

   但是可以自己通過數組的索引來修改原來的數組

  1. var ary = [12,23,24,42,1];
  2. var res = ary.forEach(function (item,index,input) {
  3. input[index] = item*10;
  4. })
  5. console.log(res);//--> undefined;
  6. console.log(ary);//--> 通過數組索引改變了原數組;

 

4. some() 和 every()

every()與some()方法都是JS中數組的迭代方法, 只返回布爾值。

every()

判斷數組中是否每個元素都滿足條件
只有都滿足條件才返回true;
只要有一個不滿足就返回false;


some()

判斷數組中是否至少有一個元素滿足條件
只要有一個滿足就返回true
只有都不滿足時才返回false

  1. // 判斷數組arr1是否全是偶數
  2. // 判斷數組arr2是否至少有一個偶數
  3. var arr1=[1, 2, 3, 4, 5];
  4. var arr2=[1, 4, 6, 8, 10];
  5. console.log(
  6. arr1.every(function(value, index, array){
  7. return value % 2 == 0;
  8. })
  9. ); // false
  10. console.log(
  11. arr2.some(function(value, index, array){
  12. return value % 2 == 0;
  13. })
  14. ); // true

5. map()

map() 方法返回一個新數組,數組中的元素為原始數組元素調用函數處理後的值。

map() 方法按照原始數組元素順序依次處理元素。

註意: map() 不會對空數組進行檢測。

註意: map() 不會改變原始數組。

array.map(function(currentValue,index,arr), thisValue)
  1. var data = [1, 2, 3, 4];
  2. var arrayOfSquares = data.map(function (item) { //接收新數組
  3. return item * item;
  4. });
  5. alert(arrayOfSquares); // [1, 4, 9, 16]

6. reduce()

1.reduce()方法接收一個函數作為累加器(accumulator),數組中的每個值(從左到右)開始合併,最終為一個值.

   array.reduce(callback, initialValue)
2.callback:執行數組中每個值的函數(也可以叫做reducer),包含4個參數.

  1. 1.previousValue:上一次調用回調返回的值,或者是提供的初始值(initialValue)
  2. 2.currentValue:數組中當前被處理的元素
  3. 3.index:當前元素在數組中的索引
  4. 4.array:調用reduce的數組
  1. // 獲取購物車中商品列表的價格總和
  2. let goodList = [{id: 1, price: 10, qty: 5}, {id: 2, price: 15, qty: 2}, {id: 3, price: 20, qty: 1}]
  3. let totalPrice = goodList.reduce((prev, cur) => {
  4. return prev + cur.price * cur.qty
  5. }, 0)
  6. console.log(totalPrice) // 100
  1. var arrString = 'abcdaabc'
  2. // 獲取字元中中每個字母出現的次數
  3. let count = arrString.split('').reduce(function(res, cur) {
  4. res[cur] ? res[cur]++ : res[cur] = 1
  5. return res
  6. }, {})
  7. console.log(count) // {a: 3, b: 2, c: 2, d: 1}

 


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

-Advertisement-
Play Games
更多相關文章
  • JQuery下載 JQuery只是一個 JS函數庫 ,要使用其中的方法還是要在JS文件中進行調用。 一般去https://mvnrepository.com/這個網站下載,搜索JQuery就能找到JS文件下載。 下載完成後通過script src="JQuery.js文件路徑",進行載入,併在其他j ...
  • 點擊直通車↓↓↓ 數據類型及數據類型的手動轉換 數組 一、概念 JavaScript(JS)是一種基於對象和事件驅動、且可以與HTML標記語言混合使用的腳本語言,其編寫的程式可以直接在瀏覽器中解釋執 二、與java的關係 從本質上來講,Java和JS是兩門語言,並沒有本質上的聯繫。 三、如何寫js代 ...
  • 關於JavaScript函數執行環境的過程,IBM developerworks文檔庫中的一段描述感覺很不錯,摘抄如下: “JavaScript 中的函數既可以被當作普通函數執行,也可以作為對象的方法執行,這是導致 this 含義如此豐富的主要原因。一個函數被執行時,會創建一個執行環境(Execut ...
  • wx.ready(function () { var startRecordflag = false var startTime = null //btnRecord 為錄音按鈕dom對象 btnRecord.addEventListener('touchstart', function (even... ...
  • 單行的js 代碼雖然簡潔,但卻不易維護,甚至難以理解, 但這卻並不影響前端童鞋們編寫簡潔代碼的熱情, 一 , 生成隨機ID 解析 : 1 , Math.random() 生成一個 0 到 1 的 隨機數 =》 number = 0.7147259888717723 2 , number.toStri ...
  • Axios == [toc] github文檔:[axios github]( https://github.com/axios/axios) 該模塊相容瀏覽器端和node.js後端發送http請求。 本文主要簡單介紹了請求的發送和響應callback的註冊。也就是axios發送ajax請求的使用方 ...
  • 做過多年web前端從業者,回答下這個問題 首先,這個問題主要問:自學web前端技術,如果才能找到一份web前端的工作。按照現在的招聘標準來看,無論你去哪個公司面試,你只需要滿足他們公司的需求就可以。 找到一份web前端工作需要掌握的內容如下: 首先是html,css這些簡單的靜態佈局這是最基本的學習 ...
  • Vue.js是一款流行的開源JavaScript前端框架,旨在更好地組織與簡化Web開發。Vue所關註的核心是MVC模式中的視圖層,同時,它也能方便地獲取數據更新,並通過組件內部特定的方法實現視圖與模型的交互。由尤雨溪在2014年2月發佈的。 一 基本語法 1. vue的使用要從創建Vue對象開始 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...