第一百一十四篇: JS數組Array(三)數組常用方法

来源:https://www.cnblogs.com/FatTiger4399/archive/2022/12/17/16988524.html
-Advertisement-
Play Games

好家伙,本篇為《JS高級程式設計》第六章“集合引用類型”學習筆記 1.數組的複製和填充 批量複製方法 copyWithin(),以及填充數組方法fill()。 這兩個方法的函數簽名類似,都需要指定既有數組實例上的一個範圍,包含開始索引,不包含結束索引。 使用這個方法不會改變數組的大小。 1.1.fi ...


好家伙,本篇為《JS高級程式設計》第六章“集合引用類型”學習筆記

 

1.數組的複製和填充

批量複製方法 copyWithin(),以及填充數組方法fill()。

這兩個方法的函數簽名類似,都需要指定既有數組實例上的一個範圍,包含開始索引,不包含結束索引。

使用這個方法不會改變數組的大小。

 

1.1.fill()方法

使用fill()方法可以向一個已有的數組中插入全部或部分相同的值

開始索引用於指定開始填充的位置,它是可選的。

如果不提供結束索引,則一直填充到數組末尾。

負值索引從數組末尾開始計算。

const array =[0,0,0,0,0];

//填充5
array.fill(5);
console.log(array);

//從索引為3的數開始填充3
array.fill(3,3);
console.log(array);

//在索引為1到3的數中填充8
array.fill(8,1,3);
console.log(array);

 

 

 

1.2.copyWithin()

copyWithin()會按照指定範圍淺複製數組中的部分內容,然後將它們插入到指定索引開始的位置

 

const array =[0,1,0,2,0,3,0,4,0,5];

//複製索引0開始的內容,插入到索引8開始時的位置
array.copyWithin(8);
console.log(array);

//複製索引5開始的內容,插入到索引0開始的位置
array.copyWithin(0,5);
console.log(array);

//複製索引0到索引2的內容,插入到索引6開始的位置
array.copyWithin(6,0,2);
console.log(array);

 

 

 

2.轉換方法

前面提到過.所有對象都有toLocaleString()、toString()和valueof()方法。

其中,valueof()返回的還是數組本身。

tostring()返回由數組中每個值的等效字元串拼接而成的一個逗號分隔的三字元串。

let colors = ["red", "blue", "green"];
console.log(colors.toString());
console.log(colors.valueOf());

//使用join()方法可以使用不同的分隔符
console.log(colors.join("||"));

 

 

3.數組常用方法

方法splice()用於創建一個包含原有數組中一個或多個元素的新數組

splice()方法可以接收一個或兩個參數:返回元素的開始索引和結束索引。

如果只有一個參數,則splice()會返回該索引到數組末尾的所有元素。

如果有兩個參數,則splice()返回從開始索引到結束索引對應的所有元素,其中不包含結束索引對應的元素。

記住,這個操作不影響原始數組。

 

或許最強大的數組方法就屬splice()了,使用它的方式可以有很多種。

splice()的主要目的是在數組中間插入元素,但有3種不同的方式使用這個方法。

(確實強大)

(1)  刪除。需要給splice()傳2個參數:要刪除的第一個元素的位置和要刪除的元素數量。

可以從數組中刪除任意多個元素,比如splice(0,2)會刪除前兩個元素。

 

(2) 插入。需要給splice()傳3個參數:開始位置、0(要刪除的元素數量)和要插入的元素,可以在數組中指定的位置插入元素。

第三個參數之後還可以傳第四個、第五個參數,乃至任意多個要插入的元素。

比如,splice(2,0,"red","green")會從數組位置2開始插入字元串"red"和"green"。

 

(3) 替換。splice()在刪除元素的同時可以在指定位置插入新元素,同樣要傳入3個參數:開始位置、要刪除元素的數量和要插人的任意多個元素。

要插入的元素數量不一定跟刪除的元素數量一致。比如,s(2,1,"red","green")會在位置2刪除一個元素,然後從該位置開始向數組中插入""和"green"。

splice()方法始終返回這樣一個數組,它包含從數組中被刪除的元素(如果沒有刪除元素,則返回空數組)

(一個方法,滿足三個願望)

試一試:

let colors = ["red", "blue", "green"];

colors.splice(0,1);
console.log(colors);

colors.splice(1,0,"black","orange");
console.log(colors);

colors.splice(1,1,"pink");
console.log(colors);

 

 

 

 

4.搜索和"判斷"方法

 4.1.搜索方法

ECMAScript提供了3個嚴格相等的搜索方法:indexof()、lastIndexof()和includes()。

其中,前兩個方法在所有版本中都可用,而第三個方法是ECMAScript7新增的。

這些方法都接收兩個參數:要查找的元素和一個可選的起始搜索位置

indexof()和includes()方法從數組前頭(第一項)開始向後搜索,而lastIndexof()從數組末尾(最後一項)開始向前搜索。
indexof()和 lastIndexof()都返回要查找的元素在數組中的位置,如果沒找到則返回-1。

includes()返回布爾值,表示是否至少找到一個與指定元素匹配的項。

 書裡面居然沒寫includes()方法的參數,補充一下:

 

 

 

const array =[1,2,3,4,5,4,3,2,1];

console.log(array.indexOf(1));
console.log(array.lastIndexOf(1));
console.log(array.includes(1));

console.log(array.indexOf(1,5));
console.log(array.lastIndexOf(1,5));
//從索引5開始找"1",找到就返回true
console.log(array.includes(1,5));

 

 

 

4.2.斷言函數

ECMAScript 也允許按照定義的斷言函數搜索數組,每個索引都會調用這個函數

斷言函數的返回值決定了相應索引的元素是否被認為匹配。
斷言函數接收3個參數:元素、索引和數組本身。

其中元素是數組中當前搜索的元素,索引是當前元素的索引,而數組就是正在搜索的數組。

斷言函數返回真值,表示是否匹配。
find()和findIndex()方法使用了斷言函數。

這兩個方法都從數組的最小索引開始。

find()返回第一個匹配的元素,findIndex()返回第一個匹配元素的索引。

這兩個方法也都接收第二個可選的參數,用於指定斷言函數內部this的值。

let people = [{
        name: "panghu",
        age: "80"
    },
    {
        name: "dream",
        age: "50"
    },
    {
        name: "xiaofu",
        age: "30"
    },
];

console.log(people.find((element, index, array) => element.age > 49));

console.log(people.findIndex((element, index, array) => element.age > 49));

 

 

(感覺這個歸類進迭代方法也沒什麼問題)

 

5.迭代方法

ECMAScript為數組定義了5個迭代方法。

每個方法接收兩個參數:以每一項為參數運行的函數.個參數:數組元素、元素索引和數組本身。

因具體方法而異,這個函數的執行結果可能會也可能不會影響方法的返回值。

數組的5個迭代方法如下。

 

(1) every():對數組每一項都運行傳入的函數,如果對每一項函數都返回true,則這個方法返回true。

(2) some():對數組每一項都運行傳入的函數,如果有一項函數返回true,則這個方法返回true。這些方法都不改變調用它們的數組。

(3) map():對數組每一項都運行傳入的函數,返回由每次函數調用的結果構成的數組。


(4) filter():對數組每一項都運行傳入的函數,函數返回true的項會組成數組之後返回。
(5) forEach():對數組每一項都運行傳入的函數,沒有返回值。

 

可以說,every(),some(),和map()組成一類,他們像斷言函數

filter()和forEach()為一類他們則更像"迭代"操作

重要的例子:

const array = [1, 2, 3, 4, 5, 4, 3, 2, 1];

//every()全部符合要求,才返回true
console.log(array.every((element, index, array) => element > 2));

//some()只要有一個符合要求,就返回true
console.log(array.some((element, index, array) => element > 2));

//map()對所有項調用方法,將每一次調用的結果構成數組返回
console.log(array.map((element, index, array) => element > 2));

//filter()0把符合要求的篩選出來
console.log(array.filter((element, index, array) => element > 2));

//forEach()把符合要求的項進行某些操作
console.log(array.forEach((element, index, array) => element > 2));

 

 

6.歸併方法

這個沒啥好說的,本質上也是迭代方法的一種,多了幾個參數而已

ECMAScript為數組提供了兩個歸併方法:reduce()和 reduceRight()。

這兩個方法都會迭代數組的所有項,併在此基礎上構建一個最終返回值。

reduce()方法從數組第一項開始遍歷到最後一項。

而 reduceRight()從最後一項開始遍歷至第一項。

(一個從左往右,一個從右往左)
這兩個方法都接收兩個參數:對每一項都會運行的歸併函數,以及可選的以之為歸併起點的初始值:傳給reduce()和reduceRight()的函數接收4個參數:上一個歸併值、當前項、當前項的索引和數組本身

這個函數返回的任何值都會作為下一次調用同一個函數的第一個參數。

如果沒有給這兩個方法傳入可選的第二個參數(作為歸併起點值),則第一次迭代將從數組的第二項開始,因此傳給歸併函數的第一個參數是數組的第一項,第二個參數是數組的第二項。
可以使用reduce()函數執行累加數組中所有數值的操作.

 

const array_1 = [9, 90, 900, 9000, 1];

let sum = array_1.reduce((prev, cur, index, array) => 
    prev + cur,
);
console.log(sum);

 

 

 

 

 

That's all

 


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

-Advertisement-
Play Games
更多相關文章
  • 這是我準備新開的學習記錄系列之一 今天寫一個插件的介紹吧—— Helium —— 視頻懸浮插件 youtube/b站/本地視頻都可以導入 主要功能就是你在看視頻時,要記一些學習筆記,隨著不斷往下寫,視頻會出現被擋住的情況。 這個時候Helium就能幫上大忙!首先點擊右上角三個點點,打開插件市場下載H ...
  • 個人名片: 對人間的熱愛與歌頌,可抵歲月冗長:sun_with_face: Github👨🏻‍💻:念舒_C.ying CSDN主頁✏️:念舒_C.ying 個人博客:earth_asia: :念舒_C.ying Web伺服器也稱為WWW(World Wide Web)伺服器,主要功能是提供網頁 ...
  • 個人名片: 對人間的熱愛與歌頌,可抵歲月冗長:sun_with_face: Github👨🏻‍💻:念舒_C.ying CSDN主頁✏️:念舒_C.ying 個人博客:earth_asia: :念舒_C.ying 1 配置環境 掛載系統ISO,並配置好本地dnf源。(前面的文章講過,這裡就略過. ...
  • TencentOS Tiny AIoT 應用創新大賽是騰訊 TencentOS 團隊聯合恩智浦半導體、安謀科技(Arm China)發起的線上開發者活動,主要面向中小企業嵌入式工程師、廣大嵌入式開發者、物聯網愛好者、創客團隊等,號召廣大開發者能參與到國內開源項目中,通過開源協同,基於 Tencent ...
  • 摘要:openGemini是華為雲面向物聯網和運維監控場景開源的一款雲原生分散式時序資料庫,相容InfluxDB API,具有高性能、高併發、高擴展等特點。 openGemini是華為雲面向物聯網和運維監控場景開源的一款雲原生分散式時序資料庫,相容InfluxDB API,具有高性能、高併發、高擴展 ...
  • Kerberos,在古希臘神話故事中,指的是一隻三頭犬守護在地獄之門外,禁止任何人類闖入地獄之中。 那麼在現實中,Kerberos指的是什麼呢? 一、Kerberos介紹 01 Kerberos是什麼 根據百度詞條釋義,Kerberos是一種電腦網路授權協議,用來在非安全網路中,對個人通信以安全的 ...
  • 近日,華為分析服務6.9.0版本發佈,正式上線探索能力。開發者可自由定義與配置分析模型,支持報告實時預覽,數據洞察體驗更加靈活與便捷。 新上線的探索能力中,有漏斗分析、事件歸因、會話路徑分析三個高級分析模型。在原有能力的基礎上,時效性進一步增強,開發者在完成配置與報告創建後,即能查看具體內容。通過低 ...
  • 隨著新一代信息技術與汽車產業的深度融合,智能網聯汽車正逐漸成為汽車產業發展的戰略制高點,無論是傳統車企還是新勢力都瞄準了“智能座艙”這種新一代人機交互方式。面對競爭如此激烈的車機市場,華為鴻蒙車機系統的出現,給消費者帶來了不同凡響的便捷使用感受,這得益於華為在硬體、軟體和場景優化上的技術優勢,用戶只 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...