簡體   English   中英

javascript中比較器的布爾排序

[英]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中用於對布爾數組進行排序的最佳比較器是減比較器,因為在這種情況下(數學過程),所有布爾(我們只有falsetrue )都將轉換為數字。

您可以從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM