JavaScript排序代碼優化:告別冗余,擁抱通用
本文將演示如何優化一段冗余的JavaScript排序代碼。原始代碼使用多個函數分別對不同屬性進行排序,不夠簡潔且缺乏靈活性。我們將重構代碼,創建一個更通用、更易維護的排序函數。
原始代碼問題:
原始代碼存在大量重復,每個排序函數幾乎相同,只是排序屬性不同。 此外,直接訪問屬性(例如a.pinyin[0])限制了靈活性,難以處理復雜的屬性嵌套。
優化方案:
立即學習“Java免費學習筆記(深入)”;
我們創建一個通用的排序函數,該函數接收屬性名稱和排序方向作為參數,從而實現代碼復用和靈活性提升。
優化后的代碼:
const sortData = (curr_data, prop, is_desc) => { const direction = is_desc ? -1 : 1; // 簡化升序/降序邏輯 return curr_data.children.sort((a, b) => { const aValue = prop.split('.').reduce((o, k) => o[k], a); // 使用reduce處理嵌套屬性 const bValue = prop.split('.').reduce((o, k) => o[k], b); return direction * (aValue > bValue ? 1 : (aValue < bValue ? -1 : 0)); // 簡潔的比較邏輯 }); }; // 使用示例: sortData(curr_data, 'pinyin', false); // 升序排序 pinyin 屬性 sortData(curr_data, 'suffix', true); // 降序排序 suffix 屬性 sortData(curr_data, 'bytes', false); // 升序排序 bytes 屬性 sortData(curr_data, 'timestamp.mtime', true); // 降序排序 timestamp.mtime 屬性
優化說明:
- sortData 函數接收三個參數:curr_data (數據)、prop (排序屬性)、is_desc (排序方向)。
- direction 變量簡化了升序/降序的邏輯。
- prop.split(‘.’).reduce 方法優雅地處理了屬性嵌套,例如 timestamp.mtime。
- 代碼更簡潔,易于理解和維護,避免了重復代碼。
通過這個優化,我們得到了一個更通用、更靈活、更易維護的JavaScript排序函數,有效解決了原始代碼的冗余問題。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END