按字母顺序对 JSON(按特定元素)进行排序

Sorting JSON (by specific element) alphabetically

本文关键字:元素 排序 顺序 JSON      更新时间:2023-09-26

我有一些格式如下的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 中没有通用的"compare"函数来为 sort() 返回合适的值。我会编写一个使用比较运算符的 compareString 函数,然后在排序函数中使用它。

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;
});