嗨,在阅读了这篇文章之后,我为自己的需求编写了一个sortComparator,并具有比较多个JSON属性的功能,我想与您分享。
此解决方案仅按升序比较字符串,但可以轻松扩展每个属性以支持:反向排序、其他数据类型、使用区域设置、转换等
var homes = [{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}];
function sortComparator(a, b, comp) {
if (a[comp[0]] === b[comp[0]]) {
if (comp.length > 1) {
return sortComparator(a, b, comp.slice(1));
} else {
return 0;
}
} else {
return (a[comp[0]] < b[comp[0]] ? -1 : 1)
}
}
homes.sort(function(a, b) {
return sortComparator(a, b, ['state', 'city', 'zip']);
});
homes.forEach(function(home) {
console.log(home.h_id, home.city, home.state, home.zip, home.price);
});
结果是
$ node sort
4 Bevery Hills CA 90210 319250
5 New York NY 00010 962500
3 Dallas TX 75201 162500
另一种排序方式
homes.sort(function(a, b) {
return sortComparator(a, b, ['city', 'zip']);
});
带有结果
$ node sort
4 Bevery Hills CA 90210 319250
3 Dallas TX 75201 162500
5 New York NY 00010 962500