【问题标题】:Sorting JSON (by specific element) alphabetically按字母顺序排序 JSON(按特定元素)
【发布时间】:2013-10-16 01:21:36
【问题描述】:

我有一些 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 json sorting


    【解决方案1】:

    不幸的是,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);
    })
    

    【讨论】:

    • 天哪,马蒂,我欠你一杯啤酒。为什么 a
    • 比较有效,因为&lt; 和朋友被定义为对字符串使用字典顺序。它在内部检查每个匹配的字符,当它找到两个不同的 Unicode 值时,它会返回,这会导致“字典”排序。这也是我添加 toLowerCase() 调用以防万一的原因,因为比较本身仅比较代码点值。它不检查大小写。
    • @MattiVirkkunen ? 谢谢!
    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2015-04-04
    相关资源
    最近更新 更多