數組操作

来源:http://www.cnblogs.com/hpushine/archive/2017/05/23/6892856.html
-Advertisement-
Play Games

一、創建數組 使用 new 操作符調用構造函數 var arr = new Array(20) // 創建了一個包含20項的數組 var arr = new Array('a', 'b', 'c') // 創建了包含字元串 a b c 的三項數組 省略 new 操作符 var arr = Array ...


一、創建數組

使用 new 操作符調用構造函數

var arr = new Array(20)				// 創建了一個包含20項的數組
var arr = new Array('a', 'b', 'c')	// 創建了包含字元串 a b c 的三項數組

省略 new 操作符

var arr = Array(20)
var arr = Array('a', 'b', 'c')

數組字面量

var arr = []
var arr = ['a', 'b', 'c']

【ES6】、Array.of()

  • 描述:

用於創建數組,用法和 new Array() 一樣。彌補 Array() 構造函數的不足(即參數不同,行為不同),Array.of() 的行為始終一致,將傳入的值作為數組的項,產生數組

  • 參數:任意數量任意值
  • 返回值:創建的數組

【ES6】、Array.from(obj, func, context)

  • 描述:用於將 類數組對象(擁有length屬性的對象) 和 可遍歷對象(部署iterable介面的對象,包括 Set/Map) 轉為真正的數組
  • 參數:
    • {Object} obj 要轉為數組的對象
    • {Function} func 一個函數,功能類似於數組的map方法,對每一個對象屬性執行該函數,並返回由該函數的返回值組成的數組
    • {Object} context 第二個函數參數的執行環境(this指向)
  • 返回值:生成的數組

二、數組檢測

使用 instanceof 操作符

if(value instanceof Array){
    // 對數組執行某些操作
}

使用 Array.isArray() 方法

if(Array.isArray(value)){
    // 對數組執行某些操作
}

使用 Object.prototype.toString.call()

if(Object.prototype.toString.call(obj) === '[object Array]'){
    // 對數組執行某些操作
}

三、數組方法

轉換方法

toLocalString()
toString()
valueOf()
join()

棧/隊列 方法

push()
  • 描述:向數組的尾部追加項,並返回數組長度
  • 參數:n多個值,會依次推入數組尾部
  • 返回值:
    • {Number} 數組長度
  • 是否改變原數組:是
pop()
  • 描述:移除數組最後一項,並返回該項
  • 參數:無
  • 返回值:返回移除項
  • 是否改變原數組:是
shift()
  • 描述:移除數組第一項,並返回該項
  • 參數:無
  • 返回值:返回移除項
  • 是否改變原數組:是
unshift()
  • 描述:在數組最前端添加項,並返回數組長度
  • 參數:n多個值,會依次添加到數組前端
  • 返回值:
    • {Number} 數組長度
  • 是否改變原數組:是

排序方法

reverse()
  • 描述:反轉數組項的順序
  • 參數:無
  • 返回值:修改後的數組
  • 是否改變原數組:是
sort()
  • 描述:對數組進行排序,預設情況下,按照升序排序,sort方法調用每個數組項的 toString() 方法,進行字元串比較
  • 參數:【可選】函數
    1、如果第一個參數 應該位於 第二個參數 之前 返回一個負數
    2、如果第一個參數 應該位於 第二個參數 之後 返回一個正數
    3、併列返回0
    
  • 返回值:排序後的數組
  • 是否改變原數組:是

####操作方法

concat()
  • 描述:基於當前數組的所有項創建一個新數組
  • 參數:【可選】任意數量的任意值
  • 返回值:返回新數組
  • 是否改變原數組:否
slice()
  • 描述:基於當前數組一或多個項創建新數組(截取數組片段)
  • 參數:接收一或兩個參數,分別是返回項的起始和結束位置
  • 返回值:
        1、只傳起始位置(即一個參數)
            返回:從起始位置到數組末尾的項組成的數組
        2、傳遞兩個參數
            返回:從起始位置到結束位置(不包含結束位置)的項組成的數組
        3、傳遞負數
            返回:會用數組長度加上該負數來確定相應的位置,並按照1、2的規則返回新數組
        4、起始位置大於結束位置
            返回:空數組
    
  • 是否改變原數組:否
splice()
  • 描述:對數組的項進行 刪除、插入、替換 等操作,功能十分強大
  • 參數:
    第一個參數:要刪除的第一項的位置
    第二個參數:要刪除的項數
    第三個參數(第四個、第五個......):插入的項
    
  • 返回值:由刪除的項組成的數組
  • 是否改變原數組:是
【ES6】copyWithin()
  • 描述:在數組內部,將指定位置的成員拷貝到其他位置(會覆蓋原有成員)
  • 參數:
    第一個參數:要拷貝的目標位置(target)
    第二個參數:從該位置讀取數據,預設是0,負值表示倒數
    第三個參數:讀取到該位置結束,預設是 數組的長度,不包含該位置,負值表示倒數
    
  • 返回值:修改後的數組
  • 是否改變原數組:是
【ES6】fill()
  • 描述:使用給定值,填充數組
  • 參數:
    第一個參數:填充的值
    第二個參數:填充的起始位置
    第三個參數:填充的結束位置(不包含該位置)
    
  • 返回值:(待測)
  • 是否改變原數組:是

查找/位置方法

indexOf()
lastIndexOf()
  • 描述:在數組中查找某一項的位置 indexOf() 從前往後查找, lastIndexOf() 從後往前查找
  • 參數:
    第一個參數:要查找的項
    第二個參數:查找起點位置索引
    
  • 返回值:返回查找項在數組中的位置,未找到返回-1

註意:在查找過程中使用全等操作符(===)

【ES6】find()
  • 描述:用於找到第一個符合條件的數組成員
  • 參數:一個函數,函數的參數:1、項。2、項的索引。3、數組對象本身
  • 返回值:如果有符合添加的項,返回該項的值,如果沒有找到符合條件的項,返回 undefined
【ES6】findIndex()
  • 描述:與find()方法功能一樣,唯一不同的是,返回的是項的位置,未找到返回 -1
【ES7】includes()
  • 描述:查找數組中是否包含給定值
  • 參數:
    第一個參數:要查找的值
    第二個參數:查找的起始位置,預設是0,負數表示倒數,查出範圍會重置為0
    
  • 返回值:true 包含, false 不包含

includes 相比於 indexOf 的優勢有兩點:1、更加語義化,不需要判斷返回值是否為 -1。2、由於 indexOf 底層在判斷是否相等時使用的是全等操作符 ===,這會導致使用 indexOf 查找 NaN 時查不到,而 includes 則不存在這樣的問題

迭代方法

forEach()
every()
some()
filter()
map()
    描述:迭代數組,對數組的每一項執行給定函數
    參數:第一個參數:函數
                函數接收三個參數
                    1、數組的項
                    2、該項在數組中的位置
                    3、數組對象本身
            第二個參數:第一個參數的執行環境(this指向)
    返回值:
        forEach() 無返回值
        every() 對數組運行給定函數,如果該函數對每一項都返回true,則返回true
        some() 對數組運行給定函數,如果該函數對任意一項返回true,則返回true
        filter() 對數組執行給定函數,返回該函數返回true的項組成的數組
        map() 對數組執行給定函數,返回每次函數調用結果組成的數組
【ES6】entries(),keys()和values()
  • 描述:entries()keys() 和 values() 都用於遍曆數組。它們都返回一個遍歷器對象(詳見《Iterator》一章),可以用 for...of 迴圈進行遍歷,唯一的區別是 keys() 是對鍵名的遍歷、values() 是對鍵值的遍歷,entries() 是對鍵值對的遍歷。

歸併方法

reduce()
reduceRight()
  • 描述:迭代數組的所有項,構建一個最終的返回值
  • 參數:
    第一個參數:函數,函數接收的參數:
        1、前一項(pre)
        2、當前項(cur)
        3、當前項的索引(index)
        4、數組對象本身(array)
    第二個參數:歸併的初始值
    
  • 返回值:迭代的最終值

註意:第一次迭代的時候,pre是數組的第一項,cur是數組的第二項,reduce() 和 reduceRight() 除了迭代方向不一致外,其他完全相同


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

-Advertisement-
Play Games
更多相關文章
  • 通過閱讀各路大神對web存儲locastorage和sessionstorage的用法解析,自己試用了一下,在此留個備忘。 在項目中,如果用到很多次storage,要存儲很多數據,就要把它封裝成函數了: (該函數系不知名大神所寫,如有侵犯原創,請聯繫我……) setStorage是存儲數據的,key ...
  • 主要是看了《數據結構與演算法》有所感悟,雖然這本書被挺多人詬病的,說這有漏洞那有漏洞,但並不妨礙我們從中學習知識。 其實像在我們前端的開發中,用到的高級演算法並不多,大部分情況if語句,for語句,swith語句等等,就可以解決了。稍微複雜的,可能會想到用遞歸去的解決。 但要註意的是遞歸寫起來簡潔,但實 ...
  • 六、垂直居中-父元素高度確定的單行文本 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>垂直居中</title> 6 <style> 7 8 .wrap h2{ 9 margin:0; 10 height:1 ...
  • Angular有5個大的組成部分: 1、控制器,2、路由,3、服務,4、篩選、5、指令 首先講服務: 服務要使用需要導入到控制器中。 自定義服務的方法: 然後是篩選器: 再是自定義指令 最後是路由:路由在上一章節已經講過,不再贅述。 ...
  • 1 $(function() { 2 $("#CheckMainCompany").change(function () { 3 if ($("#CheckMainCompany").is(':checked')) { 4 5 alert... ...
  • 1.滾動條預設是在html上的,移到body上 2.高清屏1px邊框還原 3.使用單位 px絕對單位,任何情況下都是固定值,在不同尺寸的屏幕下會錯位。 % 相對單位,相對於父級(自身)的大小進行計算。對於不太好確定值的地方(如高度)不好使用百分比,會導致變形。 em相對單位,相對於當前字體大小的倍數 ...
  • 關於表格寬度的渲染規則 表格單元格寬度的計算方式主要分為兩種方式:固定表格佈局、自動表格佈局,這個經常寫css的人應該還是知道的,但是我們經常會發現給表格列定了寬度不起作用,又或是沒有定寬度渲染出來的卻是正常的嗎,下麵就來介紹下這兩個方式具體是怎麼計算渲染的。 先設定幾個通用的變數: tableWi ...
  • 複製粘貼前隨手點個贊哦~~ //獲取地址欄參數 //url為空時為調用當前url地址 //調用方法為 var params = getPatams(); function getParams(url) { var theRequest = new Object(); if (!url) url = ... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...