Er KK Chopra
Er KK Chopra

Reputation: 1850

Sorting string with number with AngularJS in controller

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

Answers (1)

Pranav C Balan
Pranav C Balan

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

Related Questions