第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

排序混合的字母/數(shù)字?jǐn)?shù)組

排序混合的字母/數(shù)字?jǐn)?shù)組

波斯汪 2019-10-11 09:58:13
我有一個混合數(shù)組,我需要先按字母然后按數(shù)字排序[A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3]我如何將其排序?yàn)椋篬A1, A2, A3, A4, A10, A11, A12, B2, B10, F1, F3, F12]我努力了arr.sort(function(a,b) {return a - b});但這只是按字母順序排序。可以使用直接的JavaScript或jQuery完成此操作嗎?
查看完整描述

3 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊

var reA = /[^a-zA-Z]/g;

var reN = /[^0-9]/g;


function sortAlphaNum(a, b) {

  var aA = a.replace(reA, "");

  var bA = b.replace(reA, "");

  if (aA === bA) {

    var aN = parseInt(a.replace(reN, ""), 10);

    var bN = parseInt(b.replace(reN, ""), 10);

    return aN === bN ? 0 : aN > bN ? 1 : -1;

  } else {

    return aA > bA ? 1 : -1;

  }

}

console.log(

["A1", "A10", "A11", "A12", "A2", "A3", "A4", "B10", "B2", "F1", "F12", "F3"].sort(sortAlphaNum)

)


查看完整回答
1 反對 回復(fù) 2019-10-11
?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個贊

const sortAlphaNum = (a, b) => a.localeCompare(b, 'en', { numeric: true })`

用法:


const sortAlphaNum = (a, b) => a.localeCompare(b, 'en', { numeric: true })

console.log(['A1', 'A10', 'A11', 'A12', 'A2', 'A3', 'A4', 'B10', 'B2', 'F1', 'F12', 'F3'].sort(sortAlphaNum))

給出:


["A1", "A2", "A3", "A4", "A10", "A11", "A12", "B2", "B10", "F1", "F3", "F12"]


您可能必須將'en'參數(shù)更改為您的語言環(huán)境或以編程方式確定,但這適用于英語字符串。


同樣localeCompare也不受超級一致的支持,但是如果您使用babel進(jìn)行轉(zhuǎn)譯不會有問題


查看完整回答
反對 回復(fù) 2019-10-11
?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個贊

我也遇到類似的情況,但是混合使用字母數(shù)字和數(shù)字,因此需要先對所有數(shù)字進(jìn)行排序,然后再對字母數(shù)字進(jìn)行排序,因此:


A10

1

5

A9

2

B3

A2

需要成為:


1

2

5

A2

A9

A10

B3

我能夠使用提供的算法并對它進(jìn)行更多修改以實(shí)現(xiàn)此目的:


var reA = /[^a-zA-Z]/g;

var reN = /[^0-9]/g;

function sortAlphaNum(a,b) {

    var AInt = parseInt(a, 10);

    var BInt = parseInt(b, 10);


    if(isNaN(AInt) && isNaN(BInt)){

        var aA = a.replace(reA, "");

        var bA = b.replace(reA, "");

        if(aA === bA) {

            var aN = parseInt(a.replace(reN, ""), 10);

            var bN = parseInt(b.replace(reN, ""), 10);

            return aN === bN ? 0 : aN > bN ? 1 : -1;

        } else {

            return aA > bA ? 1 : -1;

        }

    }else if(isNaN(AInt)){//A is not an Int

        return 1;//to make alphanumeric sort first return -1 here

    }else if(isNaN(BInt)){//B is not an Int

        return -1;//to make alphanumeric sort first return 1 here

    }else{

        return AInt > BInt ? 1 : -1;

    }

}

var newlist = ["A1", 1, "A10", "A11", "A12", 5, 3, 10, 2, "A2", "A3", "A4", "B10", "B2", "F1", "F12", "F3"].sort(sortAlphaNum);


查看完整回答
反對 回復(fù) 2019-10-11
  • 3 回答
  • 0 關(guān)注
  • 607 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號