ES6中數組新增的方法-超級好用

来源:https://www.cnblogs.com/IwishIcould/archive/2022/03/27/16064137.html
-Advertisement-
Play Games

Array.find((item,indexArr,arr)=>{}) 掌握 找出第一個符合條件的數組成員。 它的參數是一個回調函數,對所有數組成員依次執行該回調函數。 直到找出第一個返回值為true的成員,然後返回該成員。 如果沒有符合條件的成員,則返回undefined。 -- 找出第一個大於1 ...


Array.find((item,indexArr,arr)=>{}) 掌握

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

-- 找出第一個大於15的數字
let arr = [10, 20, 30]
let firstItem = arr.find((item, index, Arr) => {
    return item > 15
})
console.log('firstItem==>', firstItem); //輸出20

-- 找出第一個大於19的數字的這一項的值
let arr = [{
    age: 10
  }, {
    age: 20
  }, {
    age: 30
  }]
let firstItem = arr.find((item, index, Arr) => {
    return item.age > 19
})
console.log('firstItem==>', firstItem); //輸出{age: 20}

Array.findIndex((item, index, Arr) => {}) 掌握

數組實例的 findIndex 方法的用法與find方法非常類似,
返回第一個符合條件的數組成員的位置,如果所有成員都不符合條件,則返回-1。
let arr = [{
    age: 10
}, {
    age: 20
}, {
    age: 30
}]
let a = arr.findIndex((item, index, Arr) => {
    return item.age > 15
})
let b = arr.findIndex((item, index, Arr) => {
    return item.age > 45
})
console.log('a==>', a); //輸出1
console.log('b==>', b); //輸出-1


//查找數組的某一項是否有某個值
//返回第一個符合條件的數組成員的位置
const arr = [{
    id: 001
}, {
    id: 002
}, {
    id: 003
}];
let index = arr.findIndex(item => {
    return item.id == '004'
})
console.log(index);

Array.flat()用於拉平嵌套的數組[推薦-超級好用]

數組的成員有時還是數組,Array.flat()用於將嵌套的數組“拉平”,變成一維的數組。
該方法返回一個新數組,對原數據沒有影響。
[1, 2, [3, 4]].flat() 讀音【fu la t】

flat()預設只會“拉平”一層,如果想要“拉平”多層的嵌套數組。
可以將flat()方法的參數寫成一個整數,表示想要拉平的層數,預設為1。

[1, 2, [3, [4, 5]]].flat()
上面代碼中,表示想要拉平的層數,預設為1
// [1, 2, 3, [4, 5]]

[1, 2, [3, [4, 5]]].flat(2)
上面代碼中,flat()的參數為2,表示要“拉平”兩層的嵌套數組。
// [1, 2, 3, 4, 5]

如果不管有多少層嵌套,都要轉成一維數組,可以用Infinity關鍵字作為參數。
[1, [2, [3]]].flat(Infinity) 
// [1, 2, 3]

如果原數組有空位,flat()方法會跳過空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]

Array.at()返回對應下標的值[超級好用]

我們都知道JavaScript不支持數組索引值為負索引。 
那麼想要表示數組的最後一個成員,不能寫成arr[-1],只能使用arr[arr.length - 1]。

為瞭解決負索引這個問題,es6中為數組實例增加了at()方法,接受一個整數作為參數。
返回對應位置的成員,支持負索引。
這個方法不僅可用於數組, 也可用於字元串和類型數組( TypedArray)。
如果參數位置超出了數組範圍,at()返回undefined。

const arr = [100, 120, 18, 130, 4];
console.log(arr.at(1)) //120
console.log(arr.at(-1)) //4
console.log(arr.at(-5)) //100
console.log(arr.at(-6)) //undefined

Array.from() [掌握]

一個類似數組的對象,Array.from將它轉為真正的數組。
需要註意的是:這個類似數組的對象必須要有length屬性才可以,轉為數組。
否者將會轉為為一個空數組
let arrayLike = {
  '0': 'a',
  '1': 'b',
  '2': 'c',
  length: 3
};

// ES5的寫法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// ES6的寫法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']

當沒有類似數組的對象沒有length屬性
let arrayLike = {
  '0': 'a',
  '1': 'b',
  '2': 'c',
};
//此時返回的是一個空數組
let arr2 = Array.from(arrayLike); // []

Array.of() 瞭解

Array.of()方法用於將【一組數值】轉換為數組.
簡單的使用:
const a = Array.of(10, 20, 26, 38);
console.log(a); // [10, 20, 26, 38]

const b = Array.of(1).length;
console.log(b);         // 1

Array.of()可以用以下的代碼模擬實現:
function ArrayOf() {
  return [].slice.call(arguments);
}

Array.includes的使用

Array.prototype.includes方法返回一個布爾值,表示某個數組是否包含給定的值。
與字元串的includes方法類似。ES2016 引入了該方法。

簡單的使用方法
const arr = [100, 200, 300];
console.log(arr.includes('100')) //false
console.log(arr.includes(100)) //true
沒有該方法之前,我們使用數組的indexOf方法,檢查是否包含某個值。
if (arr.indexOf(el) !== -1) {
  // 有這個值
}
indexOf方法有兩個缺點,一是不夠語義化,它的含義是找到參數值的第一個出現位置,
所以要去比較是否不等於-1,表達起來不夠直觀。
二是,它內部使用嚴格相等運算符(===)進行判斷,這會導致對NaN的誤判。
[NaN].indexOf(NaN) // -1

includes使用的是不一樣的判斷演算法,所以沒有這個問題。
[NaN].includes(NaN)
// true

擴展運算符 (...)

擴展運算符是三個點(...),
將一個數組轉為用逗號分隔的參數序列。
console.log(...[1, 2, 3])
// 1 2 3

console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5

[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]
let arr1=[11,22,];
let  arr2=["aa","bb"];
//  es5的合併
let arr=arr1.concat(arr2);
console.log(arr) // [11, 22, "aa", "bb"]

//es6
let newarr=[...arr1,...arr2]
console.log(newarr) // [11, 22, 33, 55, "aa", "bb", "cc", "dd"]
// 函數內部有一個對象,arguments可以獲取到實參,但是一個偽數組
//Array[餓 rei]
function sun(){
  console.log(arguments) 
  //Arguments(8) [1, 2, 3, 4, 5, 6, 7, 9, callee: ƒ, Symbol(Symbol.iterator): ƒ]  他是一個偽數組
}
sun(1,2,3,4,5,6,7,9);


// 如何將函數內部的偽數組變為真實的數組 方法1
function sun(){
  let ags=Array.prototype.slice.call(arguments);
  ags.push(150);
  console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
}
sun(1,2,3,4,5,6,7,9);


// 如何將函數內部的偽數組變為真實的數組 方法2
function sun(){
  let ags=[...arguments];//將偽數組百年未真實的數組
  ags.push(150);
  console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
}
sun(1,2,3,4,5,6,7,9);

//  總結擴展運算符是...   [...變為真實數組的對象]

數組的空位

數組的空位指的是,數組的某一個位置沒有任何值.
比如Array()構造函數返回的數組都是空位。
let arr = new Array(3)
console.log(arr); // [, , ,] 谷歌瀏覽器中會有出現  [空屬性 × 3]
上面代碼中,Array(3)返回一個具有 3 個空位的數組。
ES5 對空位的處理,已經很不一致了,大多數情況下會忽略空位。
forEach(), filter(), reduce(), every() 和some()都會跳過空位。
map()會跳過空位,但會保留這個值
join()和toString()會將空位視為undefined,而undefined和null會被處理成空字元串。

ps:ES6 則是明確將空位轉為undefined。
let arr = new Array(3)
console.log(arr[0] === undefined); //true
ps:ES6 則是明確將空位轉為undefined。
Array.from()方法會將數組的空位,轉為undefined,也就是說,這個方法不會忽略空位。
Array.from(['a',,'b'])
// [ "a", undefined, "b" ]

擴展運算符(...)也會將空位轉為undefined。
[...['a',,'b']]
// [ "a", undefined, "b" ]

new Array(3).fill('a') // ["a","a","a"]

for...of迴圈也會遍歷空位。
let arr = [, ,];
for (let i of arr) {
  console.log(1);
}
// 1
// 1
上面代碼中,數組arr有兩個空位,for...of並沒有忽略它們。
如果改成map()方法遍歷,空位是會跳過的

遇見問題,這是你成長的機會,如果你能夠解決,這就是收穫。

作者:明月人倚樓
出處:https://www.cnblogs.com/IwishIcould/

想問問題,打賞了卑微的博主,求求你備註一下的扣扣或者微信;這樣我好聯繫你;(っ•̀ω•́)っ✎⁾⁾!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,或者關註博主,在此感謝!

萬水千山總是情,打賞5毛買辣條行不行,所以如果你心情還比較高興,也是可以掃碼打賞博主(っ•̀ω•́)っ✎⁾⁾!

想問問題,打賞了卑微的博主,求求你備註一下的扣扣或者微信;這樣我好聯繫你;(っ•̀ω•́)っ✎⁾⁾!

支付寶 微信 本文版權歸作者所有,歡迎轉載,未經作者同意須保留此段聲明,在文章頁面明顯位置給出原文連接
如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。

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

-Advertisement-
Play Games
更多相關文章
  • #前言 ####之前在知乎閑逛看有意思的項目的時候,發現一個前輩曾做過一個在滑鼠周圍隨機生成愛心的小程式,閑來無聊實現了一版隨機生成彩色小球的(因為沒有女朋友,只是練練手)。最近疫情在網上撩了一個小妹妹,她知道這個程式之後,讓我給她做一個“格桑花”版的。我想著應該差不多,就改了改代碼。好感度+1(不 ...
  • 在 Ubuntu 下交換Alt和Ctrl鍵: sudo vim /usr/share/X11/xkb/keycodes/evdev 或者用系統預設編輯器打開: sudo xdg-open /usr/share/X11/xkb/keycodes/evdev 然後找到LALT和LCTL所在的行,它們的默 ...
  • 概述 1. Mycat 是什麼? Mycat 是資料庫中間件,連接 Java 應用程式和資料庫,它的作用如下: 讀寫分離 數據分片:垂直拆分(分庫)、水平拆分(分表)、垂直+水平拆分(分庫分表) 多數據源整合 2. Mycat 原理 Mycat 攔截了用戶發送過來的 SQL 語句,首先對 SQL 語 ...
  • Mysql8 安裝失敗 第一次安裝失敗 Windows Server 2012 首先是使用mysql的最新安裝包去安裝, 但是安裝包在執行到 starting mysql server 時,就卡住不動了。 手動去服務中啟動 顯示無法啟動服務 helpmsg 3534 原因不詳! 第二次安裝 由於客戶 ...
  • 一、前言 在上一篇文章中,介紹了Flutter的開發環境搭建流程,創建並運行成功一個flutter項目,用戶界面呈現也通過Android虛擬機實現線上查看效果。 但是對於一個前端來說,用 VS Code 編輯器的同學肯定很多,第一次接觸Flutter開發對於Android Studio 編輯器可能不 ...
  • 起因 由於項目App迭代,一個佈局發生了改變。因此產生了一個奇怪的問題,按道理,滑動NestedScrollView的時候,AppBarLayout會上移。這是appbar_scrolling_view_behavior和scroll|enterAlwaysCollapsed使用的常規操作嘛。但是拖 ...
  • 學習Flutter,首先需要搭建好Flutter的開發環境,下麵我將一步步帶領大家搭建開發環境並且成功運行flutter項目。 Flutter環境配置主要有這幾點: 系統配置要求 Java環境 Flutter SDK Android 開發環境 ***以下是基於在Window操作系統上安裝和配置Flu ...
  • 一、變數與屬性的區別; 1. 概念 什麼是變數? 變數:變數是一個存儲數據的容器,本質:變數是記憶體裡面的一個空間,通過變數名來獲取數據;聲明(var)一個變數就是在記憶體裡面獲取一個存儲空間。 什麼是屬性? 為元素提供各種附加信息的就是屬性,存在對象裡面表示對象有什麼樣的特征,常用名詞來表示,它總是以 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...