淺談Array --JavaScript內置對象

来源:https://www.cnblogs.com/waterrec/archive/2023/03/29/17266687.html
-Advertisement-
Play Games

Array --JavaScript內置對象 描述 可以用一個變數存儲多種數據類型的Array對象,Array不是關聯數組,不能使用字元串作為索引訪問數組元素,需要使用非負整數的下標訪問數組中的元素。 和對象的某些特征很相似,例如:屬性訪問器一半相似,衍生出的使用 .call() 或者 .apply ...


Array --JavaScript內置對象

描述

可以用一個變數存儲多種數據類型的Array對象,Array不是關聯數組,不能使用字元串作為索引訪問數組元素,需要使用非負整數的下標訪問數組中的元素。

和對象的某些特征很相似,例如:屬性訪問器一半相似,衍生出的使用 .call() 或者 .apply() 將數組方法賦予對象。

較為常用的幾個方法

有的是通過改變原數組,又或是返回一個新數組的形式。方便記憶可以劃分為:增刪改查,排序,遍歷,數據和數據集功能。

陳舊的:

此區域為增刪區域

\1. push() - 在數組末尾添加一個或多個元素,並返回新的長度。

\2. pop() - 刪除並返回數組的最後一個元素。

\3. shift() - 刪除並返回數組的第一個元素。

\4. unshift() - 在數組的開頭添加一個或多個元素,並返回新的長度。

此區域為修改區域(合併)

\5. splice() - 通過刪除或替換現有元素或者原地添加新的元素來修改數組,並以數組形式返回被修改的內容。

\6. slice() - 返回一個新的數組對象,這一對象是一個由 begin 和 end 決定的原數組的淺拷貝。

\7. concat() - 返回一個由當前數組和其它若幹個數組或者若幹個非數組值組合而成的新數組。

\8. join() - 將數組(或一個類數組對象)的所有元素連接成一個字元串並返回這個字元串。

此區域為排序查找

\9. reverse() - 顛倒數組中元素的順序。

\10. sort() - 對數組的元素進行排序。

\11. indexOf() - 返回在數組中可以找到一個給定元素的第一個索引,如果不存在,則返回-1。

\12. lastIndexOf() - 返回一個指定的元素在數組中最後出現的位置,如果不存在,則返回-1。

此區域為遍歷

\13. forEach() - 對數組的每個元素執行一次提供的函數。

\14. map() - 創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數後返回的結果。

\15. filter() - 創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。

\16. reduce() - 對數組中的所有元素執行一個由您提供的reducer函數(升序執行),將其結果彙總

新穎的:

此區域為數據和數據集功能

at() - 通過下標訪問數組元素,區別於直接用方括弧訪問,可以使用負數訪問。

flat() - 將數組扁平化,深度為1。通過傳遞一個數字參數修改深度。

flatMap() - flat() 和 map() 的結合,先扁平(深度1)再遍歷。

Array.from() - 類似數組或可迭代對象創建一個新的,淺拷貝的數組實例。例如字元串,map和set

Array.of() - 創建一個數組,區別於直接使用 Array() 創建數組,括弧內的內容是數組的實際數據。假如你想創建一個長度為7的數組應該使用 Array(7) 而不是 Array.of(7) ,因為後者會創建一個[7]的數組。

entries() - 返回一個Array迭代器對象。

Array.length

array.length 改變length屬性會發生的情況,假如length小於數組最大的下標,會將length之後的元素清除。

數組的長度跟許多方法是掛鉤的,例如 entries() 方法,會通過獲取數組長度訪問每個整數索引。可以簡單的通過 .call() 方法驗證:

const arrayLike = {
  length: 3,
  0: "a",
  1: "b",
  2: "c",
};
for (const entry of Array.prototype.entries.call(arrayLike)) {
  console.log(entry);
}
// [ 0, 'a' ]
// [ 1, 'b' ]
// [ 2, 'c' ]

可以以此倆想到樓下的通用數組方法訪問 length 屬性和索引訪問數組元素。

空槽和數組方法

可以使用 Array(n) 創建一個長度為n的空槽數組。

對於空槽而言,許多數組方法都會照顧一下。例如 concat() 方法就會將空槽省去。亦或是將空槽視為 undefined 例如你能想到的 values()

數組遍歷

forEach()for...in 兩者在特殊情況下的不同效果

for...in可能會迭代對象的原型鏈上的屬性,而array.forEach不會迭代數組的原型鏈上的屬性。此外,array.forEach可以使用break和continue語句來控制迭代。而for...in不能。

const arr1 = [1, 2, 3];
arr1.name = "shit"


arr1.forEach((i) => {
  console.log(i);
}); // 1, 2, 3

for (const i in arr1) {
  console.log(arr1[i]);
}; // 1, 2, 3, shit

數組複製

深拷貝,淺拷貝 主要比較對象的引用是否一致。例如對象和數組這類數據類型可以想象成保存的是指向數據的地址,淺拷貝的本質是兩個數組或者對象中的數據指向了同一個目標。而深拷貝則是兩個完全不同的數據指向

自帶的一個淺拷貝 slice()

簡單的完成一個深拷貝可以使用 JSON 提供的 stringifyparse 方法,通過轉成 JSON 對象再轉回數組的方式。

通用數組方法

指數組的不訪問數組對象的任何內部數據,只訪問 length 屬性和索引訪問數組元素。可以使用call方法在類數組對象上調用。

const arrayLike = {
  0: "a",
  1: "b",
  length: 2,
};
console.log(Array.prototype.join.call(arrayLike, "+")); // 'a+b'

由此來看,數組和對象的相似性還是蠻大的,又或者是較簡單的數據形式,提供的簡單方法能夠讓開發者更便捷的對數據集進行操作。


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

-Advertisement-
Play Games
更多相關文章
  • 摘要:智能把控大數據量查詢,防患系統奔潰於未然。 本文分享自華為雲社區《拒絕“爆雷”!GaussDB(for MySQL)新上線了這個功能》,作者:GaussDB 資料庫。 什麼是最大讀取行 一直以來,大數據量查詢是資料庫DBA們調優的重點,DBA們通常十八般武藝輪番上陣以期提升大數據查詢的性能:例 ...
  • 從MySQL 5.5版本開始預設 使用InnoDB作為引擎,它擅長處理事務,具有自動崩潰恢復的特性,在日常開發中使用非常廣泛 下麵是官方的InnoDB引擎架構圖,主要分為記憶體結構和磁碟結構兩大部分。 InnoDB 記憶體結構 1. Buffer Pool Buffer Pool:緩衝池,簡稱BP。其作 ...
  • 日常生產中 HDFS 上小文件產生是一個很正常的事情,同時小文件也是 Hadoop 集群運維中的常見挑戰,尤其對於大規模運行的集群來說可謂至關重要。 數據地圖是離線開發產品的基本使用單位,包含全部表和項目的相關信息,可以對錶做相關的許可權管理和脫敏管理操作,以及可以展示對應項目占用情況和其表的占用情況 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: 奧特曼愛小怪獸 文章來源:GreatSQL社區原創 前言 線上,遇到一些sql性能問題,需要手術刀級別的調優。optimizer_trace是一 ...
  • 華為HMS Core運動健康服務支持通過REST API,以GPX文件格式寫入用戶路線數據,支持導入軌跡(Track)或路程(Route)類型的數據,實現用戶路線數據在華為運動健康App中的展示效果。 假若與華為運動健康App相連接的穿戴設備支持路線導入,那麼用戶路線數據將自動下發至穿戴設備。用戶可 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 假設,我們有這樣一張 Gif 圖: 利用 CSS,我們嘗試來搞一些事情。 圖片的 Glitch Art 風 在這篇文章中 --CSS 故障藝術,我們介紹了利用混合模式製作一種暈眩感覺的視覺效果。有點類似於抖音的 LOGO。 像是這樣: 假 ...
  • 本博文介紹CSS中的基礎選擇器和複合選擇器。基礎選擇器包括標簽選擇器、類選擇器、id選擇器和通配符選擇器,複合選擇器包括後代選擇器、子選擇器、並集選擇器和偽類選擇器。 ...
  • 在上篇隨筆《基於Admin.NET框架的前端的一些改進和代碼生成處理(1)》中大致介紹了一些關於對Admin.NET框架的前端的改造工作,主要目的就是希望能夠增加代碼的簡潔和可讀性,以及利用代碼生成工具來快速生成相關的代碼,從而減少開發過程中的繁瑣問題。本篇隨筆繼續探討一下,對其中一些模塊功能進行一... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...