完全理解array.from

一、數組長度和空位

1、array.from可以把類數組對象或可迭代對象轉化為真正的數組,其中數組長度取決於迭代器中的元素數量。


const arr = Array.from({length: 5});
console.log(arr.length); // 5
console.log(arr); // [undefined, undefined, undefined, undefined, undefined]

2、但是需要注意的是,對於一個數組中不存在的元素位置,我們稱之為「空位」,它既不是undefined也不是null。使用array.from會把數組的空位轉化成undefined。


const arr = [, , ];
console.log(arr.length); // 2
console.log(Array.from(arr)); // [undefined, undefined]

3、在ES6之前,為了避免空位的影響,可以用for循環或array.prototype.map方法得到類似的數組。但是這些方法都無法避免空位的影響,代碼執行會出現意外情況。使用array.from可以避免這種問題。

二、映射函數

1、在array.from中,可以添加第二個參數作為映射函數,對轉化後得到的新數組進行處理。


const arr = [1, 2, 3, 4];
const newArr = Array.from(arr, x => x * 2);
console.log(newArr); // [2, 4, 6, 8]

2、這個映射函數類似於數組原生方法array.prototype.map的處理方式,但是它將對轉化的新數組進行處理,而不會改變原來的數組。

三、迭代器對象

1、array.from還可以接受可迭代對象作為參數,這些對象具有一個迭代器方法,該方法通過for..of循環來獲取每個元素。


const str = 'Hello';
console.log(Array.from(str)); // ['H', 'e', 'l', 'l', 'o']

2、除了字符串,DOM節點集合也是可迭代的,我們可以使用array.from將它們轉化為真正的數組。


const paragraphs = document.querySelectorAll('p');
const arr = Array.from(paragraphs);
console.log(arr);

3、因此,array.from可以讓開發者使用數組原生的方法和屬性,對DOM節點集合進行處理。

四、轉化函數

1、除了映射函數,array.from還可以接受第三個參數,轉化函數。轉化函數會在從可迭代對象中讀取每個元素後被調用,以確定如何轉換為數組元素。


const arr = Array.from({length: 3}, (v, i) => i * 2);
console.log(arr); // [0, 2, 4]

2、這個轉化函數的第一個參數是當前元素,第二個參數是當前元素的索引號。在這個例子中,可迭代對象的元素為undefined,但我們使用索引值簡單地乘以2轉換了每個數組元素。

五、使用具有Symbol.iterator屬性的對象

1、array.from還可以接受具有Symbol.iterator屬性的對象作為參數,這個屬性返回一個迭代器對象。


const obj = {
  *[Symbol.iterator]() {
    yield 1;
    yield 2;
    yield 3;
  }
}
console.log(Array.from(obj)); // [1, 2, 3]

2、在這個例子中,我們定義了一個帶有yield關鍵字的函數,這個函數返回一個生成器對象。這個生成器對象具有Symbol.iterator屬性,因此它是可迭代的。最後我們使用array.from將它轉化為真正的數組。

六、總結

1、array.from是一個強大而靈活的方法,可以將類數組對象和可迭代對象轉化為真正的數組,同時支持映射函數、轉化函數和具有Symbol.iterator屬性的對象,增加了開發者的編程靈活性。

2、使用array.from可以更優雅地處理數組和DOM節點集合的相互轉化過程,避免了一些之前的問題。

3、儘管ES6已經出現了array.from,但是我們也應該深入理解數組的本質,充分掌握原生方法和屬性的使用方式。

原創文章,作者:OHTVY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372049.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OHTVY的頭像OHTVY
上一篇 2025-04-23 18:08
下一篇 2025-04-23 18:08

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • scala Array

    一、Array的概述 Scala中的Array是不可變的,它是長度固定的序列,其中的元素類型相同。因此,Array可以看作是一種特殊的集合,其中的元素必須為同一類型。 要使用Arr…

    編程 2025-04-24
  • array.splice詳解

    一、array.splice mdn array.splice是JavaScript中常用的數組方法之一。在MDN(Mozilla Developer Network)上,我們可以…

    編程 2025-04-23
  • Python List轉Array

    一、Python List與Array的區別 在Python中,List和Array看起來非常相似,它們都可以存儲多個值,並且可以被用來訪問和操作這些值。但實際上它們之間存在一些差…

    編程 2025-04-18
  • from tqdm import tqdm的全面解析

    一、 簡介 在Python語言中,tqdm庫是一個提供進度條、可迭代對象和時間差等功能的庫。它能夠幫助程序員更加直觀地了解代碼的運行進度,從而更好地優化代碼、提高效率。其中最常用的…

    編程 2025-04-18
  • JavaScript中Array.filter的使用詳解

    一、簡介 Array.filter是ES6新增的高階函數,它接收一個回調函數,該函數作用於數組的每一個元素,返回true則保留該元素,返回false則過濾掉該元素,最終返回一個新的…

    編程 2025-02-24
  • Swift Array 完全指南

    一、概述 Swift Array 是一個用於存儲有序、相同類型數據的集合。Array 很多時候作為我們日常開發中的必備數據結構。在 Swift 中,擁有強類型系統的 Array 在…

    編程 2025-02-01
  • Python中的from import用法詳解

    1、引言 Python是一門開放源代碼的高級編程語言,具有普遍的用途和可讀性,已經成為全球應用最廣泛的編程語言之一。其中,from import語句是Python中常用的語句之一,…

    編程 2025-01-16
  • 如何使用Java的Array方法

    Java中的Array方法是開發者必須掌握的重要基礎技能之一。本文將從多個方面進行闡述,包括如何創建和初始化數組、如何對數組進行遍歷、如何查找數組中的元素、如何對數組進行排序和過濾…

    編程 2025-01-14
  • 深入了解select 1 from dual

    在Oracle數據庫中,我們經常會遇到「select 1 from dual」這樣的SQL語句,但不是每個人都能夠完全理解它的含義和用法。在這篇文章中,我們將從多個方面來詳細闡述它…

    編程 2025-01-09

發表回復

登錄後才能評論