最近在惡補js知識的時候,總是會因為js強大的文法而感到震撼。因為以前對前端方面的疏忽,導致了一些理解的錯誤。因此痛改前非,下定決心,不管做什麼事情,都要有專門研究的精神。
在介紹前,拋出一個問題:如何將多個數字組合併為一個數組?
以下的分享會分為如下小節:
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]; //等同于 onsole.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起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

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在服務器端運行,支持高並發請求。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具