JS中的Array.from有什么用?怎么用?

Array.from 是 JavaScript 中用于將類數(shù)組對象可迭代對象轉(zhuǎn)換為真正數(shù)組的方法。它適用于處理如 arguments 對象、nodelist 等類數(shù)組對象,以及 set、map、字符串可迭代對象,例如 array.from(‘hello’) 會將其拆分為字符數(shù)組。其完整語法為 array.from(arraylike, mapfn, thisarg),其中 arraylike 是必須參數(shù),mapfn 是可選的映射函數(shù),thisarg 是執(zhí)行 mapfn 時的 this 值。常見用法包括:1. 將 arguments 轉(zhuǎn)換為數(shù)組;2. 將字符串拆分為字符數(shù)組;3. 將 set 或 map 轉(zhuǎn)換為數(shù)組;4. 配合 map 函數(shù)進行元素轉(zhuǎn)換。與展開運算符相比,array.from 的優(yōu)勢在于支持直接傳入映射函數(shù),并且在某些需要兼容舊瀏覽器的場景中可通過 polyfill 實現(xiàn)支持。

JS中的Array.from有什么用?怎么用?

Array.from 是 JavaScript 中一個非常實用的方法,用來把類數(shù)組對象或者可迭代對象轉(zhuǎn)換成真正的數(shù)組。簡單來說,它能幫你快速從一些“像數(shù)組但不是數(shù)組”的東西里生成數(shù)組,方便后續(xù)操作。

什么情況下會用到 Array.from?

最常見的場景就是處理類數(shù)組對象(array-like objects)。比如函數(shù)內(nèi)部的 arguments 對象、dom 操作中獲取的 NodeList 等,它們看起來像數(shù)組,有 Length 屬性,也能通過索引訪問元素,但并不是真正的數(shù)組,因此不能直接使用 map、Filter 這些數(shù)組方法。

這時候,Array.from 就派上用場了。例如:

function example() {   console.log(Array.isArray(arguments)); // false   const args = Array.from(arguments);   console.log(Array.isArray(args)); // true } example(1, 2, 3);

除了類數(shù)組對象,它還能處理 Set、Map、字符串等可迭代對象。

怎么用?基本語法和常見用法

Array.from 的完整語法是這樣的:

Array.from(arrayLike, mapFn, thisArg)
  • arrayLike:必須,要轉(zhuǎn)換成數(shù)組的對象。
  • mapFn:可選,在新數(shù)組元素上執(zhí)行的映射函數(shù)。
  • thisArg:可選,執(zhí)行 mapFn 函數(shù)時使用的 this 值。

常見的幾種用法如下:

  • 把 arguments 轉(zhuǎn)為數(shù)組
  • 把字符串拆成字符數(shù)組
  • 把 Set 或 Map 轉(zhuǎn)換為數(shù)組
  • 配合 map 函數(shù)進行轉(zhuǎn)換處理

舉個例子:

Array.from('hello'); // ['h', 'e', 'n', 'l', 'o'] Array.from(new Set([1, 2, 3])); // [1, 2, 3]

和展開運算符的區(qū)別?

你可能會問,那我為什么不直接用 […arrayLike]?確實,展開運算符在很多情況下可以替代 Array.from。比如:

const arr1 = [...'hello']; // ['h', 'e', 'l', 'l', 'o'] const arr2 = Array.from('hello'); // 效果一樣

兩者都能實現(xiàn)同樣的結(jié)果。區(qū)別在于 Array.from 提供了第二個參數(shù),可以在生成數(shù)組的同時對每個元素做處理,有點像 map:

Array.from([1, 2, 3], x => x * 2); // [2, 4, 6]

而展開運算符沒有這個功能,只能配合 map 單獨再調(diào)用一次。

另外,對于某些瀏覽器兼容性要求較高的項目,Array.from 可以搭配 polyfill 使用,而展開運算符在老舊瀏覽器中可能完全不支持。

基本上就這些。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊9 分享