曾經看過 JavaScript 陣列方法文件並問自己它們在現實生活中到底是如何運作的嗎?
我記得當我開始編碼時,我真的用頭撞牆來理解這些方法。相信我,陣列方法不僅僅是為了破解技術面試,它們是你在現實世界開發中日常表現的朋友。
今天,我將向您展示在實際專案中何時以及如何使用這些陣列方法。
當您完成閱讀時,您會發現數組方法使您的程式碼更加清晰和可讀…更不用說,還有助於保持程式碼的理智和可維護性。
讓我們從最基礎的開始
映射()和過濾器()
首先,讓我們從幾個您很可能每天都會使用的陣列方法開始 - map() 和 filter()。
使用map()建構產品價格計算器
因此,您正在建立一個電子商務網站,並且您有一個需要打折 20% 的產品清單。
您的商品資料可能如下:
const products = [ { name: "Gaming Mouse", price: 59.99 }, { name: "Mechanical Keyboard", price: 129.99 }, { name: "4K Monitor", price: 349.99 } ];
map() 不再寫混亂的 for 循環,而是讓其變得超級乾淨:
const discountedPrices = products.map(product => ({ ...product, price: (product.price * 0.8).toFixed(2) }));
現在每個價格都有折扣,我們保留了所有原始產品資訊。乾淨簡單。
使用filter()建立智慧搜尋功能
現在讓我們建立一些更酷的東西 - 一個真正跨多個領域工作的智慧搜尋。
假設我們有以下使用者資料:
const users = [ { name: "Sarah Smith", email: "sarah@gmail.com", role: "developer" }, { name: "John Doe", email: "john@company.com", role: "designer" }, { name: "Mike Wilson", email: "mike@gmail.com", role: "developer" } ];
這是使用filter()輕鬆搜尋的方法:
const searchUsers = (query) => { return users.filter(user => user.name.toLowerCase().includes(query.toLowerCase()) || user.email.toLowerCase().includes(query.toLowerCase()) || user.role.toLowerCase().includes(query.toLowerCase()) ); };
沒錯,您可以搜尋姓名、電子郵件和角色。試試 searchUsers("dev"),它只會過濾開發人員。
如果您認為這很酷,請等待我們在下一節中介紹 reduce()。
reduce() - 不只是求和
大多數開發者主要使用reduce()來增加數字。但事實是它的能力遠不止於此——相信我。
計算購物車總計
真正的場景是計算購物車中產品的總成本,同時考慮折扣和稅金。看看這個:
const cartItems = [ { name: "Nike Air Max", price: 129.99, quantity: 2, discount: 20 }, { name: "Adidas Hoodie", price: 89.99, quantity: 1, discount: 0 }, { name: "Running Socks", price: 12.99, quantity: 3, discount: 10 } ]; const cartTotal = cartItems.reduce((total, item) => { const itemTotal = item.price * item.quantity; const discount = (itemTotal * item.discount) / 100; return total + (itemTotal - discount); }, 0);
不錯吧?您只需要實現一個功能,即可實現數量、折扣、總計計算。
文件統計工具
處理文字文件怎麼樣?我們計算所有單字、字元和句子:
const documentStats = paragraphs.reduce((stats, paragraph) => { return { words: stats.words + paragraph.split(' ').length, characters: stats.characters + paragraph.length, sentences: stats.sentences + paragraph.split(/[.!?]+/).length - 1, paragraphs: stats.paragraphs + 1 }; }, { words: 0, characters: 0, sentences: 0, paragraphs: 0 });
所以,你沒有看到reduce() 一次處理多件事是多麼美妙嗎?這比使用單獨的循環要好得多。
專業提示:如果你的reduce()回呼變得太大,小函數總是不錯的選擇。
find() 和 some()
讓我們解決兩種方法,讓您的身份驗證和審核系統變得更簡單。
建立使用者驗證系統
曾經建置過登入系統嗎?以下是 find() 如何使用戶尋找變得非常簡單:
const products = [ { name: "Gaming Mouse", price: 59.99 }, { name: "Mechanical Keyboard", price: 129.99 }, { name: "4K Monitor", price: 349.99 } ];
不再有笨重的迴圈或複雜的 if 語句。 find() 準確地回傳您需要的內容。
建構內容審核工具
這就是 some() 的閃光點 - 檢查內容是否符合禁用的單字或模式:
const discountedPrices = products.map(product => ({ ...product, price: (product.price * 0.8).toFixed(2) }));
看看 some() 如何幫助我們同時檢查多個條件。乾淨、可讀且可維護。
快速提示: some() 一旦找到匹配項就會停止檢查。處理大型資料集時的效能完美。
flat() 和 flatMap()
陣列扁平化器
您是否嘗試過展平巢狀陣列? flat() 是你最好的朋友。它將這些嵌套數組平滑為一個級別:
const users = [ { name: "Sarah Smith", email: "sarah@gmail.com", role: "developer" }, { name: "John Doe", email: "john@company.com", role: "designer" }, { name: "Mike Wilson", email: "mike@gmail.com", role: "developer" } ];
您甚至可以使用深度參數來指定要展平的深度。如果沒有深度,則預設為 1。
flatMap() - 具有多個回應的評論系統
將 flatMap() 視為巢狀陣列上的 flat() 和 map() 的組合。它映射您的數組並展平結果 - 一次完成!
這是一個真正的評論系統,每個評論可以有多個回應:
const searchUsers = (query) => { return users.filter(user => user.name.toLowerCase().includes(query.toLowerCase()) || user.email.toLowerCase().includes(query.toLowerCase()) || user.role.toLowerCase().includes(query.toLowerCase()) ); };
當您需要轉換項目並處理巢狀結果時,flatMap() 是完美的選擇。這就像用一種方法獲得兩種方法一樣!
這是另一個實際範例 - 從社群媒體貼文中提取主題標籤:
const cartItems = [ { name: "Nike Air Max", price: 129.99, quantity: 2, discount: 20 }, { name: "Adidas Hoodie", price: 89.99, quantity: 1, discount: 0 }, { name: "Running Socks", price: 12.99, quantity: 3, discount: 10 } ]; const cartTotal = cartItems.reduce((total, item) => { const itemTotal = item.price * item.quantity; const discount = (itemTotal * item.discount) / 100; return total + (itemTotal - discount); }, 0);
看看 flatMap() 如何處理潛在空結果的轉換和展平?相當光滑!
every() 和 include()
建立表單驗證系統
讓我們嘗試創建我們日常使用的東西 - 一個強大的表單驗證器。以下是 every() 如何使其乾淨:
const documentStats = paragraphs.reduce((stats, paragraph) => { return { words: stats.words + paragraph.split(' ').length, characters: stats.characters + paragraph.length, sentences: stats.sentences + paragraph.split(/[.!?]+/).length - 1, paragraphs: stats.paragraphs + 1 }; }, { words: 0, characters: 0, sentences: 0, paragraphs: 0 });
every() 檢查是否所有規則都通過。您可以看到它非常適合驗證您需要一切真實的情況。
建置權限檢查器
以下是includes()如何讓權限檢查變得非常容易:
const users = [ { id: 1, email: "alex@tech.com", password: "hashed_password_1", attempts: 0 }, { id: 2, email: "sam@tech.com", password: "hashed_password_2", attempts: 1 } ]; const authenticateUser = (email, password) => { const user = users.find(u => u.email === email); if (!user) return { status: "error", message: "User not found" }; if (user.attempts >= 3) return { status: "error", message: "Account locked" }; return validatePassword(user, password); };
includes() 讓我們的程式碼讀起來像簡單的英文。比複雜的 if 語句或迴圈要好得多。
對資料進行排序 (sort())
您是否曾經需要對資料進行排序,而不僅僅是基本的字母順序? sort() 比大多數開發人員想像的更強大。
開發自訂表格排序器
這是一個處理不同資料型別的真實表排序器:
const bannedWords = ["spam", "scam", "inappropriate"]; const moderateContent = (content) => { const containsBannedWords = bannedWords.some(word => content.toLowerCase().includes(word) ); const hasSpamPatterns = content.includes("!!!") || content === content.toUpperCase(); return { isSpam: containsBannedWords || hasSpamPatterns, reason: containsBannedWords ? "Banned words detected" : "Spam patterns found" }; };
不同欄位不再有單獨的函數。只需一台分類機即可處理所有事情!
建立排行榜系統
看看這個處理搶七的排行榜排序器:
const products = [ { name: "Gaming Mouse", price: 59.99 }, { name: "Mechanical Keyboard", price: 129.99 }, { name: "4K Monitor", price: 349.99 } ];
看看我們如何處理多個排序標準?先得分,然後獲勝,然後最短的比賽時間打破平局。
快速提示:如果您需要保留原始順序,請務必在排序之前複製陣列。
最佳實踐和性能
在開始之前,讓我們用一些小智慧來總結一下,這將使您的陣列方法更好地工作。
何時使用哪種方法
這是我根據您想要做的事情提供的實用指南:
const discountedPrices = products.map(product => ({ ...product, price: (product.price * 0.8).toFixed(2) }));
所以,不要再擔心 forEach 與 for 迴圈了。重點關注這些。
做與不做其實很重要
最後,在你離開之前。始終尋找一種方法讓事情變得更容易、更好。例如:
而不是這個:
const users = [ { name: "Sarah Smith", email: "sarah@gmail.com", role: "developer" }, { name: "John Doe", email: "john@company.com", role: "designer" }, { name: "Mike Wilson", email: "mike@gmail.com", role: "developer" } ];
總是這樣做:
const searchUsers = (query) => { return users.filter(user => user.name.toLowerCase().includes(query.toLowerCase()) || user.email.toLowerCase().includes(query.toLowerCase()) || user.role.toLowerCase().includes(query.toLowerCase()) ); };
就是這樣!您現在已經掌握了 JavaScript 陣列方法的實際知識。明智地使用它們!
記住:程式碼可讀性比微最佳化更好。首先選擇讓你的程式碼最清晰的方法。
有疑問嗎?在下面的評論中打我吧! ?
在 X(以前的 Twitter)上關注我,獲取每日 JavaScript 智慧!我分享簡短的程式碼技巧,調試實際問題,並研究 Web 開發。
保持好奇心並記住:聰明的開發人員會複製貼上,但聰明的開發人員會理解他們正在複製的內容。在下一篇文章中見到你! ✨
以上是透過現實場景解釋 JavaScript 陣列方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps,while javascriptifforInteractiveWebpages.1)JavaisComcompoppored,statieldinglationallyTypted,statilly tater astrunsonjvm.2)

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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

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

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