首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

JavaScript sort() 方法實現 AJAX 返回 JSON 數據多字段排序

     編輯:更多程式設計知識

前端處理後端返回的 JSON 數組時,Array.prototype.sort() 是原生高效的排序利器。本文通過實戰案例講解多字段升降序排序技巧。

核心語法

arr.sort(function(a, b) {
    // 升序:a - b
    // 降序:b - a
    return a.num - b.num;
});

完整實戰:AJAX 獲取並排序

$.post("data.json", function(data) {
    // 數據結構:[{num: "5"}, {num: "1"}, {num: "3"}, {num: "2"}]
    
    // 字符串數值需轉換,或使用一元加號
    data.sort(function(a, b) {
        return +a.num - +b.num;  // 升序
        // return +b.num - +a.num; // 降序
    });
    
    for (var i = 0; i < data.length; i++) {
        document.writeln(data[i].num);  // 輸出: 1 2 3 5
    }
}, "json");

進階:多字段複合排序

// 數據:[{name: "李四", age: 25, score: 90}, {name: "張三", age: 25, score: 85}, ...]
data.sort(function(a, b) {
    // 主鍵:age 升序
    if (a.age !== b.age) return a.age - b.age;
    // 次鍵:score 降序
    return b.score - a.score;
});

常見陷阱與避坑指南

陷阱現象解決方案
字符串數值直接相減"10" - "2" = 8 ✓ 但 "10" > "2" 字符串比較錯誤使用 +a.num 或 Number(a.num) 強制轉型
sort 修改原數組副作用影響後續邏輯先拷貝:[...data].sort(...)
對象屬性缺失返回 NaN 導致順序混亂加默認值:(a.num||0) - (b.num||0)
穩定性依賴ES2019 前 sort 不穩定現代瀏覽器已穩定,舊環境用索引輔助

性能優化建議

  • 大數據量(>10萬條)考慮 Web Worker 離屏排序
  • 預計算排序鍵:data.map(x => ({...x, _key: +x.num})).sort((a,b)=>a._key-b._key)
  • 避免在比較函數中執行複雜計算或 DOM 操作

總結

sort() 配合箭頭函數可寫出極簡代碼:data.sort((a,b) => +a.num - +b.num)。掌握比較函數返回值語義(負/零/正),靈活組合多字段排序,是前端數據處理的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved