0
const arr = [
{Id:"3",name: "ADMIN"},
{Id:"1",name: "SECURITY"},
{Id:"2",name: "INFORMATION_REPORTING"},
{Id: "23",name: "PAYMENTS_SERVICES"},
{Id: "344",name: "PAYMENT_HUB"},
{Id: "31",name: "RTP"},
{Id: "43",name: "PAYMENTS"},
{Id: "34",name: "GPI_ALERTS"},
{Id: "65",name: "ADMINISTRATION"}
]

I have the arr which has the values as describing here.And I want to reorder the arr using the key name as below, Order to be shown.

ADMIN
ADMINISTRATION
PAYMENTS
RTP
PAYMENTS_SERVICES
INFORMATION_REPORTING
PAYMENT_HUB
SECURITY
GPI_ALERTS

So I want the arr in this order shown above based on name key.

Yevhen Horbunkov
  • 14,965
  • 3
  • 20
  • 42
Amit
  • 325
  • 1
  • 5
  • 16

1 Answers1

0

You may use Array.prototype.sort() and compare arr items based on their position (Array.prototype.indexOf()) within orderList

const arr = [{Id:"3",name:"ADMIN"},{Id:"1",name:"SECURITY"},{Id:"2",name:"INFORMATION_REPORTING"},{Id:"23",name:"PAYMENTS_SERVICES"},{Id:"344",name:"PAYMENT_HUB"},{Id:"31",name:"RTP"},{Id:"43",name:"PAYMENTS"},{Id:"34",name:"GPI_ALERTS"},{Id:"65",name:"ADMINISTRATION"}],

    orderList =  ['ADMIN','ADMINISTRATION','PAYMENTS','RTP','PAYMENTS_SERVICES','INFORMATION_REPORTING','PAYMENT_HUB','SECURITY','GPI_ALERTS'],
    
    result = arr.sort(({name:nameA},{name:nameB}) =>
        !orderList.includes(nameA) ?
        1 :
        !orderList.includes(nameB) ?
        -1 :
        orderList.indexOf(nameA) - orderList.indexOf(nameB)
      )
      
console.log(result)      
.as-console-wrapper{min-height:100%;}
Yevhen Horbunkov
  • 14,965
  • 3
  • 20
  • 42