我有一个多维数组,我想按两个因素排序:首先是状态,然后是按字母顺序排列的城市。
var locations = [
['Baltimore', 'Maryland', 'MD'],
['Germantown', 'Maryland', 'MD'],
['Rockville', 'Maryland', 'MD'],
['San Francisco', 'California', 'CA'],
['San Diego', 'California', 'CA']
];
如何根据这两个因素按字母顺序对它们进行排序? 第一州,然后是城市? 我知道怎么做只是一个因素,而不是两个..
答案 0 :(得分:2)
locations.sort(function(x, y) {
if (x[1] > y[1]) // if you want to sort by abbreviation,
return 1; // use [2] instead of [1].
else if (x[1] < y[1])
return -1;
else if (x[0] > y[0])
return 1;
else if (x[0] < y[0])
return -1;
else
return 0;
});
答案 1 :(得分:1)
您可以使用“LINQ for JavaS cript”库。非常有用的库。
答案 2 :(得分:1)
使用自定义排序回调:
locations.sort(function(a, b)
{
if (a[1] < b[1])
{
return -1;
}
if (a[1] > b[1])
{
return 1;
}
if (a[0] < b[0])
{
return -1;
}
if (a[0] > b[0])
{
return 1;
}
return 0;
});
答案 3 :(得分:1)
试试这个:
locations.sort(function(a, b){
var cmp = function(x, y){ //generic for any sort
return x > y? -1 : x < y ? 1 : 0;
};
return [cmp(a[1], b[1]), cmp(a[0], b[0])] <
[cmp(b[1], a[1]), cmp(b[0], a[0])] ? 1 : -1;
});
例如,如果您希望降临城市,可以使用-cmp(...)
代替cmp(...)
答案 4 :(得分:1)
你可以用更少的其他ifs来做到这一点 - 如果你有很多城市可能会有所作为。
var locations= [
['Baltimore','Maryland','MD'],
['Germantown','Maryland','MD'],
['Rockville','Maryland ','MD'],
['San Francisco','California','CA'],
['San Diego','California','CA']
];
locations.sort(function(a, b){
if(a[1]===b[1]){
if(a[0]===b[0]) return 0;
return a[0]>b[0]? 1:-1;
}
return a[1]>b[1]? 1:-1;
})
//alert(locations.join('\n'))
locations.join('\n')
/* returned value: (String)
San Diego,California,CA
San Francisco,California,CA
Baltimore,Maryland,MD
Germantown,Maryland,MD
Rockville,Maryland ,MD
*/