Reputation: 1850
i have data like :-
$scope.crewList = [{id: 1, weekName: "crew1", dayName: "sunday"},
{id: 4, weekName: "crew11", dayName: "monday"},
{id: 3, weekName: "crew12", dayName: "tuesday"},
{id: 2, weekName: "crew10", dayName: "tuesday"},
{id: 5, weekName: "crew4", dayName: "tuesday"},
{id: 8, weekName: "crew3", dayName: "tuesday"},
{id: 12, weekName: "crew2", dayName: "tuesday"}]
and need to sort by weekName, I am looking for solution in controller not in html
expected :-
$scope.crewList = [{id: 1, weekName: "crew1", dayName: "sunday"},
{id: 12, weekName: "crew2", dayName: "tuesday"}
{id: 4, weekName: "crew3", dayName: "monday"},
{id: 3, weekName: "crew4", dayName: "tuesday"},
{id: 2, weekName: "crew10", dayName: "tuesday"},
{id: 5, weekName: "crew11", dayName: "tuesday"},
{id: 8, weekName: "crew12", dayName: "tuesday"}]
Thanks in advance
Upvotes: 4
Views: 57
Reputation: 115222
Extract the number from the string and return the difference to sort them.
$scope.crewList.sort(({weekName : a},{weekName : b}) => (a.match(/\d+$/) || [0])[0] - (b.match(/\d+$/) || [0])[0])
const list = [{id: 1, weekName: "crew1", dayName: "sunday"},
{id: 12, weekName: "crew2", dayName: "tuesday"},
{id: 4, weekName: "crew3", dayName: "monday"},
{id: 3, weekName: "crew4", dayName: "tuesday"},
{id: 2, weekName: "crew10", dayName: "tuesday"},
{id: 5, weekName: "crew11", dayName: "tuesday"},
{id: 8, weekName: "crew12", dayName: "tuesday"}];
list.sort(({weekName : a},{weekName : b}) => a.match(/\d+$/)[0] - b.match(/\d+$/)[0]);
console.log(list)
Upvotes: 2