簡體   English   中英

使用比較函數對數組進行排序 - javascript

[英]Sorting an array with a compare function - javascript

我遇到了這種數組排序,但我不理解包含“-1:1”的比較函數。 請有人向我解釋一下比較功能到底在做什么?

 const rows = [ createECG('ad0917d4-e02d-4c46-a5aa-dd83717684e9', '28/06/2022', 'pending'), createECG('9034124a-2ac8-4d52-8711-ef1351a5c18a', '18/05/2022', 'complete'), createECG('a2a7a1f4-81a0-4b70-b1e2-ee7a384a1f4f', '01/05/2022', 'pending'), createECG('e5427e62-5897-4eee-a6a6-8f9925feef96', '21/04/2022', 'complete') ].sort((a) => (a.status === 'pending' ? -1 : 1)); // The object 'a' has a property called 'status' console.log(rows); function createECG(id, date, status) { return {id, date, status}; }

如果第一個參數a低於b如果其狀態為pending ,則比較函數返回-1 這表明a低於b ,因此應該提前排序。 預期的結果是所有pending的元素都將位於結果的前面。

但這並不是真正有效的,因為比較函數需要保持一致——如果a低於b ,那么b也不應該低於a 當它比較兩個掛起的對象時,當它們以任一順序傳遞時,它將返回-1 在這種情況下,比較函數應該返回0 ,但事實並非如此。

您需要采用比較的增量進行對稱排序。

 function createECG(id, date, status) { return { id, date, status }; } const rows = [ createECG('ad0917d4-e02d-4c46-a5aa-dd83717684e9', '28/06/2022', 'pending'), createECG('9034124a-2ac8-4d52-8711-ef1351a5c18a', '18/05/2022', 'complete'), createECG('a2a7a1f4-81a0-4b70-b1e2-ee7a384a1f4f', '01/05/2022', 'pending'), createECG('e5427e62-5897-4eee-a6a6-8f9925feef96', '21/04/2022', 'complete') ] .sort((a, b) => (b.status === 'pending') - (a.status === 'pending')); console.log(rows);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

排序就像過濾一樣,你的代碼意味着... 當 a.status === 'pending' 等於 1 時,表示該項目的狀態屬性設置為待處理,當它等於 -1 時表示狀態未設置為待處理,然后因為 1 是正確且優越的,那么具有待處理狀態的項目將首先出現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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