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

Ale*_*her 9 javascript sorting json

我有一些格式如下的JSON:

places =[
     {
      "city":"Los Angeles",
      "country":"USA",
     },
     {
      "city":"Boston",
      "country":"USA",
     },
     {
      "city":"Chicago",
      "country":"USA",
     },
] 
Run Code Online (Sandbox Code Playgroud)

等等...

我试图按字母顺序对BY CITY进行排序 ,但我很难这样做.我相信我的问题的根源似乎是确定角色的顺序(与数字相对).我试过一个简单的事:

    places.sort(function(a,b) {
     return(a.city) - (b.customInfo.city);
    });
Run Code Online (Sandbox Code Playgroud)

然而,这个减法不知道该怎么做.有人可以帮我吗?

Mat*_*nen 32

遗憾的是,JavaScript中没有通用的"比较"函数来为sort()返回合适的值.我编写了一个compareStrings函数,它使用比较运算符,然后在sort函数中使用它.

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);
})
Run Code Online (Sandbox Code Playgroud)

  • 比较起作用是因为`<`和朋友被定义为对字符串使用词典排序.在内部,它检查每个匹配的字符,当它找到两个不同的Unicode值时,它返回,这导致"字典"排序.这也是为什么我添加toLowerCase()调用以防万一,因为比较本身仅比较代码点值.它没有检查案例. (3认同)

Mic*_*ary 8

Matti的解决方案是正确的,但您可以更简单地编写它.你不需要额外的函数调用; 您可以将逻辑直接放在sort回调中.

对于不区分大小写的排序:

places.sort( function( a, b ) {
    a = a.city.toLowerCase();
    b = b.city.toLowerCase();

    return a < b ? -1 : a > b ? 1 : 0;
});
Run Code Online (Sandbox Code Playgroud)

区分大小写的排序:

places.sort( function( a, b ) {
    return a.city < b.city ? -1 : a.city > b.city ? 1 : 0;
});
Run Code Online (Sandbox Code Playgroud)