[英]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);
帶有undefined
或null
的兩個對象將首先放在數組中。 我如何讓它們進入陣列的后面?
只需相應地修改比較功能即可。 見下文。 請注意,我使用== 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);
您可以檢查undefined
或null
的值,然后將它們排序到數組的末尾,同時使用鏈式方法保留距離的順序。
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.