在介紹前,拋出一個問題:如何將多個數字組合併為一個數組?
以下的分享會分為如下小節:
1.concat方法的基礎介紹
2.從實例中感受concat方法
1.concat方法的基礎介紹
concat方法用於多個數組的合併。它將新數組的成員,加到原始數組的尾部,然後傳回一個新數組,原始數組不變。
console.log([].concat([1],[2],[3])); // [1, 2, 3] console.log([].concat([[1],[2],[3]])); // [[1], [2], [3]] console.log([].concat(4,[[5,6],[7]])); // [4, [5, 6], [7]]
上面程式碼中,第一個回傳值是將一個空數組與三個數組[1],[2],[3]合併為一個數組,因此回傳了[1, 2, 3]。第二個是將一個空數組與一個二維數組合併,二維數組的成員為[1],[2],[3],因此回傳了[[1], [2], [3]],注意,傳回的是二維數組。第三個例子同理。這裡對概念的理解很重要,即將新數組的成員,加入原始數組的尾部。
除了接受陣列作為參數,concat也可以接受其他類型的值作為參數。它們會作為新的元素,並新增數組尾端。
console.log([].concat(1,2,3)); //[1,2,3]; //等同于 console.log([].concat(1,[2,3])); //[1,2,3]; console.log([].concat([1],[2,3])); //[1,2,3];
這裡雖然內容較少,看起來還挺簡單。但是真正理解真的不容易。
2.從實例中感受concat方法
說完基礎的知識,給大家看看我最近遇到的一個題目。原題是這樣的。
看範例就能明白是什麼意思了。
這道題目中,其中一個解決方案就是:
var flatten = function (arr){ return [].concat.apply([],arr); };
這一段簡單的函數就可以實現將數組中的元素合併的功能。但是當我在理解這個回傳值的時候,出現了一個問題。
問題:為什麼使用apply方法和沒有使用apply方法會有區別?
console.log([].concat.apply([],[[1],[2],[3]])); //[1, 2, 3] console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]]
上面程式碼中,同樣是在一個空數組中新增數組,第一個回傳的是[1,2,3]。第二個卻是二維數組。
經過一段時間的折騰,終於理解了其中不同的原因所在。
首先,我們在空數組中呼叫實例方法concat的時候,是傳入concat中的參數,在push到數組的末尾。
console.log([].concat(1,2,3)); //[1, 2, 3] console.log([].concat([1],[2],[3])); //[1, 2, 3] console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]] console.log([].concat([[[1],[2],[3]]])); // [[[1], [2], [3]]]
上面程式碼中,從單一元素,到一維數組,二維數組,三維數組逐漸變化的。
在Javascript中call,apply,bind方法的詳解與總結 文章中,有提到apply方法的作用與call方法類似,也是改變某個函數中this指向(函數執行時所在的作用域),然後在指定的作用域中,呼叫函數。同時也會立即執行該函數。唯一的區別就是,它接收一個數組作為函數執行時的參數。
apply方法的第一個參數也是this所要指向的那個對象,如果設為null或undefined或this,則等同於指定全域物件。第二個參數則是數組,數組的所有成員依序作為參數,在呼叫時傳入原函數。原函數的參數,在call方法中必須一個個添加,但是在apply方法中,必須以數組形式添加。
console.log([].concat([1],[2],[3])); //[1, 2, 3] console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]] console.log([].concat.apply([],[[1],[2],[3]])); //[1, 2, 3]
在上面程式碼中,上半段直接使用concat方法,將傳入的參數合併到空數組中。下半段中,呼叫了String物件的實例方法apply,將concat()函數內部的this指向了[],並且在[]作用域下,傳入呼叫concat需要的參數,並且以數組的方式傳入。再看幾個例子。
console.log([].concat([1,2,3])); //[1, 2, 3] console.log([].concat.apply([],[[1],[2],[3]]));//[1, 2, 3] console.log([].concat([[1],[2],[3]]));//[[1], [2], [3]] console.log([].concat.apply([],[[[1],[2],[3]]]));//[[1], [2], [3]] console.log([].concat([[[1],[2],[3]]]));//[[[[1], [2], [3]]]] console.log([].concat.apply([],[[[[1],[2],[3]]]]));//[[[1], [2], [3]]]
總結:
1.單獨使用concat方法時,會將新數組的成員,添加到原始數組的尾部,然後返回一個新數組,原始數組不變;如果傳入的其他類型的值,它們會作為新的元素,添加到數組末尾。
2.陣列元素合併的方法:
var flatten = function (arr){ return [].concat.apply([],arr); };
var flatten = function (array){ return array.reduce(function(a,b){ return a.concat(b); },[]) }
如果對不理解文章

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

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

SublimeText3 Linux新版
SublimeText3 Linux最新版

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

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器