我有一個具有像這樣項的數組:如何通過2個屬性對數組進行排序? (正則表達式)
var myArray =
[
{catNum : 'CAT I #4', trackingNumber : 'ORG Cat-123'},
{catNum : 'CAT I #6', trackingNumber : 'ORG Dog-345'},
{catNum : 'CAT I #2', trackingNumber : 'ORG Cat-123'},
{catNum : 'CAT I #2', trackingNumber : 'ORG Cat-345'},
{catNum : 'CAT II #15', trackingNumber : 'ORG Fish-264'},
{catNum : 'CAT III #1', trackingNumber : 'ORG Bird-123'},
{catNum : 'CAT II #7', trackingNumber : 'ORG Dog-533'},
]
欲由catNum對數組進行排序,並且如果catNum是相同的,然後排序由跟蹤號碼。
在下面的代碼,我能夠通過第一個屬性進行排序(即:CATI# - > CAT II# - > CAT III#):
myArray.sort(function mySort(a, b)
{
return catTrackSort(a, b);
});
function catTrackSort(a, b)
{
var left = a.catNum.match(/CAT ([IV]+) #([0-9]+)/);
var right = b.catNum.match(/CAT ([IV]+) #([0-9]+)/);
if (left[1].length === right[1].length)
{
return left[2] - right[2];
}
else
{
return left[1].length - right[1].length;
}
}
在比較功能,如果catNum是相同的,我想通過在trackingNumber property--我曾嘗試以下字母順序進行排序,但它不排序:
function catTrackSort(a, b)
{
var left = a.catNum.match(/CAT ([IV]+) #([0-9]+)/);
var right = b.catNum.match(/CAT ([IV]+) #([0-9]+)/);
if (left[1].length === right[1].length)
{
if (left[2] === right[2])
{
var left1 = a.trackingNumber.match(/ORG ([A-Z]+)/);
var right2 = b.trackingNumber.match(/ORG ([A-Z]+)/);
return left1[1] - right1[1];
}
else return left[2] - right[2];
}
else
{
return left[1].length - right[1].length;
}
}
如何糾正這種任何想法?
如果您的問題是按字母順序排序,請嘗試'xxx'.localeCompare('yyy'); – folkol