js сортировка в массиве по недавно используемым тайтлам

Рейтинг: 0Ответов: 1Опубликовано: 17.05.2023

у меня есть массив пользователей

const users = [{id: 0, name: 'alex', id: 1, name: 'john', id: 2, name: 'bob', id: 3, name: 'jane'}]

и также у меня есть массив имен недавно заходившихся на сайт юзеров

const cashUsers = ['bob', 'jane']

как мне преобразовать первый массив таким образом, чтобы в нем на первом месте были jane, bob а затем все остальные пользователи вообще, все что есть в массиве users, при том jane и bob'а там уже быть не должно, потому что они сверху? наверное каким-то перебором, сначала проходимся по массиву users и смотрим есть ли в нем jane and bob, если хоть один совпал, то кладем в новые массив newUsers, а из users удаляем, затем когда строковые имена в массиве cashUsers закончились и мы их удалили из users, то массив users как-то сортируем как нам надо, по алфавиту например и уже добавляем в массив newUsers, конечно все имена все имена вымышлены, а совпадения случайны, здесь речь не о юзерах, но всеже шоб не ошибиться решил спросить, может кто лучше преложит решение?

Ответы

▲ 0

как мне преобразовать первый массив таким образом, чтобы в нем на первом месте были jane, bob а затем все остальные пользователи вообще, все что есть в массиве users, при том jane и bob'а там уже быть не должно, потому что они сверху?

Если я правильно понял про сортировку - такое можно сделать вот так...

const users = [
  {id: 0, name: 'alex'}, 
  {id: 1, name: 'john'}, 
  {id: 2, name: 'bob'}, 
  {id: 3, name: 'jane'}
]
const cashUsers = ['bob', 'jane']
users.sort((a, b) => {
  let i = cashUsers.indexOf(a.name)
  if (i === -1) i = Infinity
  let j = cashUsers.indexOf(b.name)
  if (j === -1) j = Infinity
  if (i != j) return i - j
  if (a.name > b.name) return 1
  if (a.name < b.name) return -1
  return 0
})
console.log(users)