JavaScript自定義比較器是指在數組排序時,可以自定義排序規則的函數,通常可以使用sort()方法進行排序。
比如在一組數字中,想要按照個位數的大小進行排序,就需要自定義比較器函數。
let arr = [23, 51, 87, 15, 42]; function compareFunc(a, b) { return a % 10 - b % 10; } arr.sort(compareFunc); console.log(arr); // [51, 23, 42, 15, 87]
上面的例子中,自定義比較器函數compareFunc返回的是a和b的個位數之差,從而實現了按個位數排序的功能。
也可以使用比較器函數進行字符串排序,比如按照字符長度。
let arr = ["apple", "banana", "peach", "orange"]; function compareFunc(a, b) { return a.length - b.length; } arr.sort(compareFunc); console.log(arr); // ["peach", "apple", "banana", "orange"]
在字符串比較時,自定義比較器函數返回的是a和b的長度之差。
除了數字和字符串,自定義比較器還可以用于對數組進行排序。
比如對以下數組按照每個元素的第一個數字進行排序。
let arr = [[7, "apple"], [3, "banana"], [5, "peach"], [1, "orange"]]; function compareFunc(a, b) { return a[0] - b[0]; } arr.sort(compareFunc); console.log(arr); // [[1, "orange"], [3, "banana"], [5, "peach"], [7, "apple"]]
在數組比較時,自定義比較器函數返回的是a和b的第一個元素之差。
除了數字、字符串、數組,自定義比較器還可以涉及到對象。
比如按照每個對象的age屬性進行排序,如下:
let arr = [ {name: "Tom", age: 25}, {name: "Jerry", age: 19}, {name: "Bob", age: 35}, {name: "Alice", age: 28} ]; function compareFunc(a, b) { return a.age - b.age; } arr.sort(compareFunc); console.log(arr); /* [ {name: "Jerry", age: 19}, {name: "Tom", age: 25}, {name: "Alice", age: 28}, {name: "Bob", age: 35} ] */
在對象比較時,自定義比較器函數返回的是a和b的age屬性之差。
在使用自定義比較器時,需注意幾點:
- 自定義比較器函數需返回一個數字,表示a和b之間的大小關系
- 若返回大于0的值,a會被排在b之后
- 若返回小于0的值,a會被排在b之前
- 若返回等于0的值,a和b的順序不會改變
自定義比較器可以應用于各種數據類型的排序,靈活性很高,值得掌握。