我正在尝试对数组进行排序。例如,给定数组a(下面),我想返回数组b。
我知道我可以做a.sort()
但是,我不想对实际的数组元素进行排序,而是对数组元素的属性(本例中的s)进行排序。如何实现这一目标?
谢谢
var a=[
{s:"ced",o:{obj:1}},
{s:"cde",o:{obj:2}},
{s:"ade",o:{obj:3}},
{s:"bde",o:{obj:4}}
]
var b=[
{s:"ade",o:{obj:3}},
{s:"bde",o:{obj:4}},
{s:"cde",o:{obj:2}},
{s:"ced",o:{obj:1}}
]
答案 0 :(得分:7)
Array.prototype.sort
接受一个可选参数:一个回调告诉它如何排序。
a.sort(function(x,y) {
// do something here
// return -1 if x < y
// return 1 if x > y
// otherwise, return 0
});
所以,在你的情况下,它将是:
a.sort(function(x,y) {return x.s == y.s ? 0 : (x.s < y.s ? -1 : 1);});
答案 1 :(得分:1)
sort
方法接受 compareFunction 参数,您可以在其中定义如何计算排序顺序。
如您要比较字符串,此功能应使用建议localeCompare
的here
创建可以快速调整的排序功能的一种方法是通过另一个功能生成它。这意味着您可以自动为对象的任何属性创建排序函数
将两者放在一起,你得到..
function genSortFn(prop){
return function(a,b){ return a[prop].localeCompare( b[prop] ); };
}
a.sort( genSortFn('s') );
b.sort( genSortFn('s') );
答案 2 :(得分:1)
a.sort(function(a, b){
if(a.s < b.s){
return -1;
}
if(a.s > b.s){
return 1;
}
return 0;
});