programing

JSON을 알파벳 순으로 첫 번째 문자로 정렬

goodsources 2022. 9. 13. 22:18
반응형

JSON을 알파벳 순으로 첫 번째 문자로 정렬

다음과 같은 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": "Барнаул"
  },
  ...
]

기타 등등...

백엔드에 라라벨이 있고 전면에 VueJ가 있습니다.

솔루션:

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

이것으로 충분합니다.

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)

언급URL : https://stackoverflow.com/questions/43750568/sorting-json-alphabetically-by-first-letter

반응형