簡體   English   中英

按特定順序對 JS 數值數組進行排序

[英]Sort a JS numerical array in specific order

我有一個數組[1, 85, -1, -1, 25, 0]

我需要這樣排序: [0, 1, 25, 85, -1, -1]

嘗試使用 sort() 方法,但沒有運氣,因為它不是按 ASC 順序...

邏輯:這些值代表距離上次訂單的天數。 -1表示沒有順序。 要求按最近訂購的順序訂購。

sort回調中,您會收到兩個參數(我通常稱它們為ab )。 如果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.

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