[英]Sort a JS numerical array in specific order
我有一個數組[1, 85, -1, -1, 25, 0]
我需要這樣排序: [0, 1, 25, 85, -1, -1]
嘗試使用 sort() 方法,但沒有運氣,因為它不是按 ASC 順序...
邏輯:這些值代表距離上次訂單的天數。 -1
表示沒有順序。 要求按最近訂購的順序訂購。
在sort
回調中,您會收到兩個參數(我通常稱它們為a
和b
)。 如果a
應該在b
之前,則返回負數,如果無關緊要,則返回 0(出於排序目的,它們是相同的),如果a
應該在b
之后,則返回正數。
在您的情況下,由於 -1 最后出現(您已經說過沒有其他負數),您只需要對其進行特殊處理:
array.sort((a, b) => {
if (a === -1) { // < 0 would also work, since there aren't any others
return 1;
}
if (b === -1) { // "
return -1;
}
return a- b;
});
現場示例:
const array = [1, 85, -1, -1, 25, 0]; array.sort((a, b) => { if (a === -1) { return 1; } if (b === -1) { return -1; } return a- b; }); console.log(array);
當然,這可以更簡潔,我寫它主要是為了最大程度的清晰。 但例如:
array.sort((a, b) => a === -1 ? 1 : b === -1 ? -1 : a - b);
就我個人而言,我更喜歡比這更冗長的內容。 但... :-)
您可以檢查是否小於零並按升序對其余部分進行排序。
var array = [1, 85, -1, -1, 25, 0]; array.sort((a, b) => (a < 0) - (b < 0) || a - b); console.log(array);
您可以像往常一樣sort()
,然后使用splice()
和push()
將-1
顯式移動到末尾。
let arr = [1, 85, -1, -1, 25, 0]; arr.sort((a, b) => a - b); let idx = arr.findIndex(a => a != -1); arr.push(...arr.splice(0, idx)); console.log(arr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.