【问题标题】:Sorting JSON alphabetically by first letter按首字母字母顺序对 JSON 进行排序
【发布时间】:2017-05-03 03:28:14
【问题描述】:

我有一个这样的 JSON:

[
  {
    "id": 1,
    "slug": "abakan",
    "name": "Абакан"
  },
  {
    "id": 4,
    "slug": "almetevsk",
    "name": "Альметьевск"
  },
  {
    "id": 10,
    "slug": "astrahan",
    "name": "Астрахань"
  },
  {
    "id": 11,
    "slug": "barnaul",
    "name": "Барнаул"
  },
  ...
]

通过这种方法得到这个:

public function getCities()
{
    $cities = City::mainCities()->get(['id', 'slug', 'name']);
    return response()->json($cities);
}

我怎样才能按字母顺序和他们的字母排序这个列表。例如:

"A": [
  {
    "id": 1,
    "slug": "abakan",
    "name": "Абакан"
  },
  {
    "id": 4,
    "slug": "almetevsk",
    "name": "Альметьевск"
  }
],
"B": [
  {
    "id": 11,
    "slug": "barnaul",
    "name": "Барнаул"
  },
  ...
]

等等……

我在后端有 Laravel,在前面有 VueJS。

【问题讨论】:

标签: javascript laravel-5 vuejs2


【解决方案1】:

我的解决方案:

var cities = [
  { id: 1, slug: "abakan", name: "Абакан" },
  { id: 4, slug: "almetevsk", name: "Альметьевск" },
  { id: 11, slug: "barnaul", name: "Барнаул" },
  { id: 10, slug: "astrahan", name: "Астрахань" }
];

cities.sort(function(a, b) {
  return a.slug[0].localeCompare(b.slug[0]);
});

var newCities = {};

for (var i = 0; i < cities.length; i++) {
  var c = cities[i].slug[0].toUpperCase();
  if (newCities[c] && newCities[c].length >= 0)
    newCities[c].push(cities[i]);
  else {
    newCities[c] = [];
    newCities[c].push(cities[i]);
  }
}

console.log(newCities);

【讨论】:

    【解决方案2】:

    这对我有用:

    var items = [
      {
        "id": 11,
        "slug": "barnaul",
        "name": "Барнаул"
      },
      {
        "id": 1,
        "slug": "abakan",
        "name": "Абакан"
      },
      {
        "id": 4,
        "slug": "almetevsk",
        "name": "Альметьевск"
      },
      {
        "id": 10,
        "slug": "astrahan",
        "name": "Астрахань"
      }
    ];
    var sortedItems = items.sort((a, b) => a.slug.localeCompare(b.slug));
    
    var results = {};
    for (var i = 0; i < 26; i++) {
      var char = String.fromCharCode(97 + i);
      var bigChar = char.toUpperCase();
      results[bigChar] = [];
      for (var s = 0; s < sortedItems.length; s++) {
        if (sortedItems[s].slug.startsWith(char)) {
          results[bigChar].push(sortedItems[s]);
        }
      }
    }
    
    console.log(results)
    

    【讨论】:

      猜你喜欢
      • 2017-02-28
      • 2018-12-03
      • 2018-12-07
      • 2019-06-25
      • 1970-01-01
      • 2019-11-22
      • 2011-08-29
      • 1970-01-01
      • 2017-05-22
      相关资源
      最近更新 更多