Search code examples
javascriptarraysecmascript-6javascript-objects

sort array in javascript base on the external id


I have an array of users and each user has a unique id. I want to sort this array by comparing with my currentUser so I can have my current user in the first place inside the array and all others after that(alphabetically) how can I do that in javascript?

Thanks

const currentuser = "f8a0b09c-ea3e-4f33-9c01-c16200f6ce1b";

const lists = [
  {
    "name": "Mahdieh Hosseiny",
    "avatar": "/static/media/defaultAvatar.95bdd942.svg",
    "id": "eb6433d3-11e8-4660-82fa-3f53cca569f4"
  },
  {
    "name": "Ahmad Dehnavi",
    "avatar": "/static/media/defaultAvatar.95bdd942.svg",
    "id": "dc21291c-34bc-4363-b733-cbc405ba2eab"
  },
  {
    "name": "Staff 4 Worrell",
    "avatar": "/static/media/defaultAvatar.95bdd942.svg",
    "id": "a3738c05-d6fb-4fb2-90ef-98d0b71939c5"
  },
  {
    "name": "Amir Hossein",
    "avatar": "/static/media/defaultAvatar.95bdd942.svg",
    "id": "c1a70e04-992e-4509-8271-29efe3f6813b"
  },
  {
    "name": "Hormoz Javadi",
    "avatar": "/static/media/defaultAvatar.95bdd942.svg",
    "id": "c9dbbb02-7179-4137-87df-f080cd5b7400"
  },
  {
    "name": "westscityclub verify",
    "avatar": "/static/media/defaultAvatar.95bdd942.svg",
    "id": "25b93407-7b0d-4639-a758-0c7e40a88dc4"
  },
  {
    "name": "Tina  Worrell",
    "avatar": "savatar.jpg",
    "id": "f8a0b09c-ea3e-4f33-9c01-c16200f6ce1b"
  }
]

Solution

  • This will ouput the result array in which the correspoding object will be the first, and others will be sorted by name prop:

    [
      ...lists.filter((item) => item.id === currentuser),
      ...lists.filter((item) => item.id !== currentuser).sort((a, b) => a.name.localeCompare(b.name)),
    ]
    

    const currentuser = "f8a0b09c-ea3e-4f33-9c01-c16200f6ce1b";
    
    const lists = [
      {
        "name": "Mahdieh Hosseiny",
        "avatar": "/static/media/defaultAvatar.95bdd942.svg",
        "id": "eb6433d3-11e8-4660-82fa-3f53cca569f4"
      },
      {
        "name": "Ahmad Dehnavi",
        "avatar": "/static/media/defaultAvatar.95bdd942.svg",
        "id": "dc21291c-34bc-4363-b733-cbc405ba2eab"
      },
      {
        "name": "Staff 4 Worrell",
        "avatar": "/static/media/defaultAvatar.95bdd942.svg",
        "id": "a3738c05-d6fb-4fb2-90ef-98d0b71939c5"
      },
      {
        "name": "Amir Hossein",
        "avatar": "/static/media/defaultAvatar.95bdd942.svg",
        "id": "c1a70e04-992e-4509-8271-29efe3f6813b"
      },
      {
        "name": "Hormoz Javadi",
        "avatar": "/static/media/defaultAvatar.95bdd942.svg",
        "id": "c9dbbb02-7179-4137-87df-f080cd5b7400"
      },
      {
        "name": "westscityclub verify",
        "avatar": "/static/media/defaultAvatar.95bdd942.svg",
        "id": "25b93407-7b0d-4639-a758-0c7e40a88dc4"
      },
      {
        "name": "Tina  Worrell",
        "avatar": "savatar.jpg",
        "id": "f8a0b09c-ea3e-4f33-9c01-c16200f6ce1b"
      }
    ];
    
    console.log([
    	...lists.filter((item) => item.id === currentuser),
      ...lists.filter((item) => item.id !== currentuser).sort((a, b) => a.name.localeCompare(b.name)),
    ]);