[英]boolean sort for comparator in javascript
我發現以下布爾類型:
const sorted = things.sort((left, right) => {
return Number(!!left.current) - Number(!!right.current);
});
這是對布爾值進行排序的正確方法嗎?
為什么不只使用-
運算符?
things = [{"current":true},{"current":false},{"current":true}] things.sort((left, right) => left.current - right.current); console.log(things);
-
將兩個操作 Number
自動強制為Number
。
您可以使用值的差,轉換為布爾值。
減號運算符將兩個操作數都強制轉換為數字,並返回一個數值,該數值反映Array#sort
所需的順序。
undefined
值排序到末尾 ,並且永遠不會用於排序回調。
var booleans = [0, true, 42, undefined, null, NaN, 'foo']; booleans.sort((a, b) => Boolean(a) - Boolean(b)); // falsy values first console.log(booleans); booleans.sort((a, b) => Boolean(b) - Boolean(a)); // truthy values first console.log(booleans);
.as-console-wrapper { max-height: 100% !important; top: 0; }
是的,JavaScript中用於對布爾數組進行排序的最佳比較器是減比較器,因為在這種情況下(數學過程),所有布爾(我們只有false
和true
)都將轉換為數字。
您可以從Array.sort()函數的文檔中閱讀它:
compareFunction可選
指定定義排序順序的函數。 如果省略,則根據每個字符的Unicode代碼點值 (根據每個元素的字符串轉換)對數組進行排序。
它是一個unicode代碼點值,表示它是一個數字。
例
我不得不提到,您不需要對Number(!!boolean)
這樣的Number(!!boolean)
進行額外的轉換。
// We need two arrays to see the difference between // ascending and descending order because the returned // array is sorted in place, and no copy is made. var things1 = [true, false, true, false, true], things2 = [true, false, true, false, true]; var sorted_AscendingOrder = things1.sort(function(left, right) { return left - right }); var sorted_DescendingOrder = things2.sort(function(left, right) { return right - left }); console.log(sorted_AscendingOrder.join(', ')); console.log(sorted_DescendingOrder.join(', '));
但是您可以對布爾數組進行排序, 而無需任何比較器 ,如下所示:
var things3 = [true, false, true, false, true]; // in Ascending Order console.log(things3.sort().join(', ')); var things4 = [true, false, true, false, true]; // in Descending Order console.log(things4.sort().reverse().join(', '));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.