JavaScript 數組操作方法 和 ES5數組拓展

来源:https://www.cnblogs.com/evenyao/archive/2018/07/21/9346198.html
-Advertisement-
Play Games

JavaScript中數組有各種操作方法,以下通過舉例來說明各種方法的使用: 數組操作方法 push 在數組最後添加一個元素 pop 把數組最後一位取出來,並返回,且原來數組發生變化 shift 把數組第一位取出來,並返回,且原來數組發生變化 unshift 在數組第一位新增一個元素 join 把數 ...


JavaScript中數組有各種操作方法,以下通過舉例來說明各種方法的使用:

數組操作方法

push

在數組最後添加一個元素

var arr=[3,4,5,6]
console.log(arr)   //[3, 4, 5, 6]

arr.push("evenyao")  //字元串需要加"",數字不加
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

 

pop

把數組最後一位取出來,並返回,且原來數組發生變化

var arr=[3, 4, 5, 6, "evenyao"]
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

var value = arr.pop()   //arr.pop()的返回值就是取出的值,但這裡是undefined是因為前面有var value
console.log(value)  //"evenyao"
console.log(arr)   //[3, 4, 5, 6]

 

shift

把數組第一位取出來,並返回,且原來數組發生變化

var arr=["root",3, 4, 5, 6, "evenyao"]
console.log(arr)   //["root",3, 4, 5, 6, "evenyao"]

var value = arr.shift()
console.log(value)  //"root"
console.log(arr)  //[3, 4, 5, 6, "evenyao"]

 

unshift

在數組第一位新增一個元素

var arr=[3, 4, 5, 6, "evenyao"]
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

arr.unshift("root")  //字元串需要加"",數字不加
console.log(arr)   //["root",3, 4, 5, 6, "evenyao"]

 

join

把數組元素使用參數作為連接符,鏈接成字元串,不會修改原數組的內容

var arr=[3, 4, 5, 6, "evenyao"]
console.log(arr.join('-'))   //3-4-5-6-evenyao
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

 

splice

splice方法用於一次性解決數組添加、刪除(這兩種方法一結合就可以達到替換效果),方法有三個參數

1.開始索引
2.刪除元素的位移
3.插入的新元素,當然也可以寫多個

使用splice完成刪除

var arr=[3, 4, 5, 6, "evenyao"]
var arr2 = arr.splice(1,2)   //從下標為1的元素開始,取出2個元素作為一個數組的返回,原數組發生改變

console.log(arr)  //[3, 6, "evenyao"]
console.log(arr2)  //[4, 5]

使用splice完成新增

var arr=[3, 4, 5, 6, "evenyao"]
arr.splice(1,0,8,9,"yes")   //從下標為1的位置(元素4)開始,刪除0個,新增三個元素(8,9,"yes"),位置在(元素4)之前

console.log(arr)   //[3, 8, 9, "yes", 4, 5, 6, "evenyao"]

 

slice

取出元素(區間)可作為新數組。但不一樣的是原數組不發生變化

var arr=[3, 4, 5, 6, "evenyao"]
var arr2 = arr.slice(2,3)  //從arr下標為2開始,到下標為3結束(不包括3,即只取了一個),作為新數組,原數組不變

console.log(arr)   //[3, 4, 5, 6, "evenyao"]
console.log(arr2)   //[5]

 

reverse

將數組逆序,會修改原數組

var arr=[3, 4, 5, 6, "evenyao"]
console.log(arr)   //[3, 4, 5, 6, "evenyao"]

arr.reverse()
console.log(arr)  //["evenyao", 6, 5, 4, 3]

 

concat

用於拼接數組,但不會修改任何一個原始數組,也不會遞歸鏈接數組內部數組

var a = [1,2,3,4,5];
var b = [6,7,8,9];
console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a); //[1, 2, 3, 4, 5]
console.log(b); //[6, 7, 8, 9]

也因為不會改變任何一個原始數組,因此可以用concat來進行數組的深拷貝,即:

var arr=[3, 4, 5, 6, "evenyao"]
var arr2 = arr.concat([])   //相當於和一個空數組進行了拼接,然後生成了arr2看上去和arr一模一樣,但是卻是兩塊不一樣的記憶體空間

console.log(arr)   //[3, 4, 5, 6, "evenyao"]
console.log(arr2)   //[3, 4, 5, 6, "evenyao"]
arr === arr2   //false

 

sort

用於對數組進行排序,會改變原數組

var arr=[5,4,3,2,1]
arr.sort()
console.log(arr) //[1, 2, 3, 4, 5]

但是有一些情況下情況下會變成下麵這樣:

var arr=[7,8,9,10,11]
arr.sort()
console.log(arr) //[10, 11, 7, 8, 9]

因為按照字母表排序,7比10大,這時候我們需要傳入自定義排序函數

var arr = [7,8,9,10,11]

arr.sort(function(v1,v2){
       return v1-v2
})
console.log(arr) //[7, 8, 9, 10, 11]

其他案例:

    var users = [
        {
            name: 'aaa',
            age: 21
        },
        {
            name: 'baa',
            age: 18
        },
        {
            name: 'abc',
            age: 24
        }
    ]

    // 按age 從小到大排序
    var sortByAge = users.sort(function(v1, v2){
        return  v1.age > v2.age
    })

  // 按name從大到小排序
    var sortByName = users.sort(function(v1, v2){
        return  v1.name > v2.name
    })

ES5 數組拓展

ES5為Array做了大幅拓展

.indexOf / .lastIndexof

該方法用於查找數組內指定元素的位置,查到第一個之後返回其索引,沒有找到則返回-1。lastIndexOf反向搜索,查到第一之後,返回其索引,但順序還是取正序。

var arr = [2,3,4,"root","evenyao",3,8,7]
console.log(arr.indexOf(3))   //1
console.log(arr.indexOf(11))   //-1
console.log(arr.lastIndexof(3))   //5

 

forEach

遍曆數組,參數為一個回調函數,回調函數有三個參數

  1. 當前元素 value
  2. 當前元素索引值 i
  3. 整個數組 array
var arr = [1,2,3,4,5,6]

arr.forEach(function(value,i,array){
    array[i]= value + 1
})

console.log(arr); //[2, 3, 4, 5, 6, 7]
var arr  = [3,4,"evenyao"]
arr.forEach(function(value,index){
    console.log('' + value+value)
})

//33
//44
//evenyaoevenyao

 

map

遍曆數組,回調函數。返回值做操作之後組成一個新數組返回,新數組索引結構和原數組一致,原數組不變

var arr = [1,2,3,4,5,6]
var arr2 = arr.map(function(val){
    return val * val
})

console.log(arr)   //[1, 2, 3, 4, 5, 6]
console.log(arr2)   //[1, 4, 9, 16, 25, 36]

 

every、some

邏輯判定,回調函數返回一個布爾值

  • every是所有函數的每個回調函數都返回true,才返回true,遇到false就終止執行,返回false
var arr = [1,2,-1,0,5]
arr.every(function(val){
    return val>0
})  //false
     
var arr = [1,2,1,3,5]
arr.every(function(val){
    return val>0
})  //true
   
  • some是存在有一個回調函數返回true就終止執行並返回true,否則返回false
var arr = [1,2,-1,0,5]
arr.some(function(val){
    return val>0
})  //true

  



 

filter

返回數組的一個子集,回調函數用於邏輯判斷是否返回,返回true則把當前元素加入到返回數組中,false則不加。新數組只包含返回true的值,原數組保持不變。

var arr = [3,5,6,-1,-2,-3]
var arr2 = arr.filter(function(val){
    return val > 0
})

console.log(arr)  //[3, 5, 6, -1, -2, -3]
console.log(arr2)  //[3, 5, 6]

其他案例:

var users = [
  { name: "John", age: 15 },
  { name: "Pete", age: 19 },
  { name: "Ann", age: 12 }
]

//篩選age > 18的用戶
var age18 = users.filter(function(user){
    return user.age > 18
})
console.log(age18)
     
var users = [
  { name: "John", age: 15 },
  { name: "Pete", age: 19 },
  { name: "Ann", age: 12 }
]

//篩選姓名中含有'n'的用戶
var namehasn = users.filter(function(user){
    return user.name.indexOf('n')>-1
})
console.log(namehasn)

 

 



 

reduce

遍曆數組,調用回調函數,將數組元素組合成一個值,不影響原數組

  1. 回調函數:把兩個值合為一個,返回結果
  2. value,一個初始值,可選
var arr = [3,4,5]
arr.reduce(function(v1,v2){
    return v1 + v2
})  //12
arr.reduce(function(v1,v2){
    return v1 * v2 
})  //60

//含value初始值
arr.reduce(function(v1,v2){
    return v1 + v2
},10)  //22
arr.reduce(function(v1,v2){
    return v1 * v2 
},10)  //600
 

參考鏈接

 

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

-Advertisement-
Play Games
更多相關文章
  • Ionic 需要Node.js 環境,官網下載:http://nodejs.org/,node 命令預設將安裝到 /usr/bin https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distri ...
  • Android設備列印比較麻煩,一般設備廠商都提供原生app開發的SDK,我們web開發者為難了,不會原生開發啊 給大家提供一個思路,實現web加殼,利用列印瀏覽器實現 簡單來說就是把我們的web頁面嵌入瀏覽器中 web頁面的列印功能通過js與瀏覽器互動 瀏覽器通過調用硬體SDK實現列印 1、機器安 ...
  • 揭秘黑客工具教程:微信密碼怎麼破解?如何破解別人的微信密碼? 微信的出現確實給人們的生活帶來了極大的便利,現在人們在生活中不僅使用微信社交,還會在閑來無事時視頻,發一下紅包或者是轉賬。據不完全統計,目前微信在全國共有十億人次在使用,大家在使用的過程中均對其強大的功能予以稱贊。隨著微信功能日益強大,微 ...
  • 1、JSONString轉換為字典 2、JSONString轉換為數組 3、字典轉換為JSONString ...
  • TypeScript在node項目中的實踐 TypeScript可以理解為是JavaScript的一個超集,也就是說涵蓋了所有JavaScript的功能,併在之上有著自己獨特的語法。最近的一個新項目開始了TS的踩坑之旅,現分享一些可以借鑒的套路給大家。 為什麼選擇TS 作為巨硬公司出品的一個靜態強類 ...
  • URLSearchParams 介面定義了一些實用的方法來處理 URL 的查詢字元串。 URLSearchParams()是個構造函數,將返回一個可以操作查詢字元串的對象。 常用方法: 1、構造查詢字元串 2、獲取查詢字元串參數 相容性: 相容性較差 建議使用polyfill:https://git ...
  • 條件指令 所謂條件指令是指滿足某個條件時執行哪部分代碼,不滿足條件時執行哪部分條件代碼。vue條件指令有v-if,v-else-if,v-else三個,v-if條件渲染用來指示元素是否移除或者插入,根據表達式的值的真假條件渲染元素。 v-if示例 方式一使用v-if顯示標簽,當初始化值為true時, ...
  • 如果你是一個人在自學前端開發,或者是對前端開發有比較濃厚的興趣正想踏入前端領域,只要你在前端自學路上遇到了自己無法解決的技術難題,那麼儘管將你的疑惑交給我的小伙伴兒們吧,我們都是一群在前端自學路上摸爬滾打的有志青年,希望你可以來和我們共同交流。同時也希望你能獻出自己的一份力,幫助我的小伙伴兒們解決他 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...