我有一些格式如下的 JSON:
places =[
{
"city":"Los Angeles",
"country":"USA",
},
{
"city":"Boston",
"country":"USA",
},
{
"city":"Chicago",
"country":"USA",
},
]
等等...
我正在尝试按字母顺序按城市排序,但遇到了困难。我相信我的问题的根源似乎是确定字符的顺序(相对于数字)。我尝试过一个简单的方法:
places.sort(function(a,b) {
return(a.city) - (b.customInfo.city);
});
但是,这个减法不知道该怎么办。有人可以帮我吗?
不幸的是,JavaScript 中没有通用的“比较”函数来为 sort() 返回合适的值。我会编写一个使用比较运算符的 CompareStrings 函数,然后在排序函数中使用它。
function compareStrings(a, b) {
// Assuming you want case-insensitive comparison
a = a.toLowerCase();
b = b.toLowerCase();
return (a < b) ? -1 : (a > b) ? 1 : 0;
}
places.sort(function(a, b) {
return compareStrings(a.city, b.city);
})
Matti的解决方案是正确的,但你可以写得更简单。您不需要额外的函数调用;您可以将逻辑直接放在
sort
回调中。
对于不区分大小写的排序:
places.sort( function( a, b ) {
a = a.city.toLowerCase();
b = b.city.toLowerCase();
return a < b ? -1 : a > b ? 1 : 0;
});
对于区分大小写的排序:
places.sort( function( a, b ) {
return a.city < b.city ? -1 : a.city > b.city ? 1 : 0;
});
在对城市进行排序的情况下,特别是如果我们从 API 或任何其他不会出现重复城市名称的来源获取它们,我们可以简化排序功能以获得更好的可读性。
places.sort(function (a, b) {
return a.city < b.city ? -1 : 1;
});
这里我们本质上是说:如果按字母顺序 a.city 位于 b.city 之前,则在排序数组中将 a 放在 b 之前。否则,请将 b 放在 a 之前。
即使在不太可能存在重复城市名称的情况下,此功能仍然有效