簡體   English   中英

如何使用sort將undefined或null推到數組的后面?

[英]How to push undefined or null to the back of an array with sort?

我在數組中有3個項目,每個項目都有一個名為distanceFromUser的屬性,它只是一個number 這些對象中有兩個undefined為該屬性undefined

如果我運行items.sort((a,b) => a.distanceFromUser - b.distanceFromUser); 帶有undefinednull的兩個對象將首先放在數組中。 我如何讓它們進入陣列的后面?

只需相應地修改比較功能即可。 見下文。 請注意,我使用== null ,它還會檢查未定義的(而===不會)。 使用or運算符( a.distanceFromUser || ... )或類似方法的其他建議解決方案也相當可觀,但是如果distanceFromUser為0,則容易出錯。

 let items = [ { distanceFromUser: 1 }, { distanceFromUser: 23 }, { distanceFromUser: undefined }, { distanceFromUser: 12 }, { distanceFromUser: 2 }, { distanceFromUser: 9 }, { distanceFromUser: null }, ]; items.sort((a, b) => { if (b.distanceFromUser == null) return -1; if (a.distanceFromUser == null) return 1; return b.distanceFromUser - a.distanceFromUser; }); console.log(items); 

您可以檢查undefinednull的值,然后將它們排序到數組的末尾,同時使用鏈式方法保留距離的順序。

 var items = [{ id: 1, distanceFromUser: undefined }, { id: 2, distanceFromUser: 1 }, { id: 3, distanceFromUser: 2 }, { id: 4, distanceFromUser: 5 }, { id: 5, distanceFromUser: 1 }, { id: 6, distanceFromUser: undefined }, { id: 7, distanceFromUser: null }, { id: 8, distanceFromUser: null }]; items.sort( (a, b) => (a.distanceFromUser === undefined || a.distanceFromUser === null) - (b.distanceFromUser === undefined || b.distanceFromUser === null) || a.distanceFromUser - b.distanceFromUser ); console.log(items); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

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

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