JSON排序(按特定元素)

yuvru6vn  于 2023-10-21  发布在  其他
关注(0)|答案(3)|浏览(91)

我有一些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);
    });

但是这个减法不知道怎么做。有人能帮帮我吗?

2cmtqfgy

2cmtqfgy1#

马蒂的解决方案是正确的,但你可以写得更简单。你不需要额外的函数调用;你可以直接把逻辑放在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;
});
xsuvu9jc

xsuvu9jc2#

在对城市进行排序的上下文中,特别是如果我们从API或任何其他不希望出现重复城市名称的源获取它们,我们可以简化排序函数以提高可读性。

places.sort(function (a, b) {
     return a.city < b.city ? -1 : 1;
});

我们基本上是在说:如果a.city排在b.city之前,那么在排序数组中将a放在b之前。否则,将B放在a之前。

即使在不太可能的情况下,存在重复的城市名称,该功能仍然有效

vpfxa7rd

vpfxa7rd3#

不幸的是,在JavaScript中没有通用的“compare”函数来为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);
})

相关问题