2017-05-03 1 views
1

Ich habe einen JSON wie folgt aus:Sortierung JSON alphabetisch nach Anfangsbuchstaben

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

Und das durch dieses Verfahren erhalten:

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

Wie kann ich diese Liste alphabetisch sortieren und mit ihren Briefen. Zum Beispiel:

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

und so weiter ...

Ich habe Laravel auf das Backend und VueJS auf der Vorderseite.

+0

Diese Antwort hier beantwortet worden sein: http://stackoverflow.com/questions/19259233/sorting-json-by -spezifisches-alphabetisch hoffe das hilft! – Alex

Antwort

2

Meine Lösung:

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].toUpperCase() > b.slug[0].toUpperCase(); 
}); 

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

Dies funktioniert für mich:

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) 
Verwandte Themen