相關學習推薦:javascript影片教學
前言
從去年發現字串的replace方法有很多神奇用法的時候,就想做這個系列,但是一直沒空,也沒有想到很好的名字,就擱置了。上週五刷題的時候看評論有個解決方法是用Array.from一行解決,而且效率還挺高的。於是啃了一下文檔和博客,搞清楚了之後就想正好可以開始這個系列了。而且數組是我們開發中最常用的資料結構之一,作為產生數組的方法之一,以from開始也蠻意思。系列名字就先湊合這麼叫吧。
- 基礎語法
定義:from() 方法用於透過擁有length 屬性的物件或可迭代的物件來傳回一個數組。
語法:Array.from(object, mapFunction, thisValue)
參數 | 描述 |
object | 必需,要轉換為陣列的物件。 |
- 可選,陣列中每個元素要呼叫的函數。
thisValue
可選,映射函數(mapFunction)中的 this 物件。
範例用法
#1. 將類別數組轉換為陣列
Array.from('hello') //["h", "e", "l", "l", "o"] Array.from(new Set(['name','age'])) //["name", "age"] Array.from({name:'lgc',age:25}) //[] let map=new Map() map.set('name','lgc') map.set('age',25) Array.from(map) //[["name", "lgc"],["age", 25]] function test(){ console.log(Array.from(arguments)) } test(1,2,3) //[1, 2, 3]复制代码這是我們平常最常用的功能,寫這些範例的時候我還奇怪:為什麼map能轉成陣列而object只能轉為空數組。當我查看菜鳥教程,看到上述定義我才明白。 object既沒有length也不是可迭代對象,我之前以為object也是可迭代對象,畢竟都可以用for-in嘛。但其實es6的object不是可迭代對象,這裡不多贅述,有興趣的同學可以去查一下。
2. 陣列深層拷貝(一行程式碼)
function clone(arr){ return Array.isArray(arr) ? Array.from(arr, clone):arr } let arrayA=[[1,2],[3,4]] let arrayB=clone(arrayA) arrayA===arrayB //false arrayA[0]===arrayB[0] //false复制代码這裡主要用到了Array.from的第二個參數mapFunction,mapFunction預設傳兩個參數,陣列的值和下標。
3. 陣列去重
function unique(arr){ return Array.from(new Set(arr)) }复制代码這也是from最基本,也是我們最常用的功能之一。
4. from的其他用法
再看一次from定義:from() 方法用於透過擁有length
屬性的物件或可迭代的物件來傳回一個陣列。擁有length就行?試試看Array.from({length:2},(val,index)=>index) //[0,1]复制代码
可以,那他有什麼用呢?第一,像上面程式碼,可以很方便產生在一定範圍,有一定規則的陣列
Array.from({length:3},(val,index)=>index*10) //[0,10,20]复制代码
第二,陣列的初始化。例如你想產生指定長度的物件數組。第一反應是什麼? fill嗎?
let testArr=Array(3).fill({}) testArr[0]===testArr[1] //true复制代码這裡的每個物件其實都是同一個,你修改一個其他自然會跟著改變,但很多時候我們需要的並不是這樣的。
let testArrb=Array.from({length:3},()=>({})) testArrb[0]===testArrb[1] //false复制代码這兩個方法可以根據需求使用。
5. from的進階用法
上面的內容其實層層遞進下來都是為了更好的理解下面的解題思路。 LeetCode第867題:給定一個矩陣A, 傳回 A
的轉置矩陣。矩陣的轉置是指將矩陣的主對角線翻轉,交換矩陣的行索引與列索引。 範例1: 輸入:[[1,2,3],[4,5,6],[7,8,9]] 輸出:[[1,4,7],[2, 5,8],[3,6,9]] 範例2: 輸入:[[1,2,3],[4,5,6]] 輸出:[[1,4],[2,5], [3,6]]
當時第一個反應這就不是索引互換嗎?賊簡單。於是寫瞭如下程式碼
var transpose = function(A) { let x=A.length let y=A[0].length for(let i=0;i<x;i++){ for(let j=0;j<y;j++){ if(j-i>0){ [A[i][j],A[j][i]]=[A[j][i],A[i][j]] } } } return A };复制代码###執行程式碼:通過,提交:失敗。臥槽?看一下錯誤提示,發現忽略了範例2這種,「長寬」不等的情況。轉換思路,內外循環翻轉。最外循環每執行一次即一列當做行。執行,通過。 ######不過這版看起來太撈了,而且執行時間太慢。但畢竟自己實現了,可以去留言區找其他想法。 ######下面這個就是看評論區大神實現,第一次都沒看懂。 ###
var transpose = function(A) { return Array.from({length:A[0].length},(_v,i)=>A.map(v=>v[i]))};复制代码###{length:A[0].length},是以給定矩陣的寬度作為轉置矩陣的長,為了滿足「擁有###length### 屬性的物件」這一條件。 (_v,i)=>A.map(v=>v[i]),取給定矩陣的列作為轉置矩陣的行。核心想法和我第二版是一樣的,但是實現方式和技巧就秀太多了。而且執行時間也較短,膜拜大神。 #########想了解更多程式設計學習,請關注###php培訓###欄位! ##########
以上是需要知道的JS數組之Array.from的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

禪工作室 13.0.1
強大的PHP整合開發環境

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

Atom編輯器mac版下載
最受歡迎的的開源編輯器