ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как пересобрать массив объектов, выкинув из него лишнее?

Есть массив объектов:

[
 {
  uid: "1",
  owner: "2"
  createdAt: Date
 }, {
  uid: "2",
  owner: "1"
  createdAt: Date
 },{
  uid: "3",
  owner: "2"
  createdAt: Date
 },
]

Нужно убрать лишний объект где uid === owner && owner === uid, при этом оставить объект в массиве с более свежей датой createdAt.
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Как-то так, если без учёта дубликатов, в один проход.
function removeSomeShit(arr) {
  const table = {};
  const result = [];

  for(const current of arr) {
    const {uid, owner, createdAt} = current;

    const uidOvnerKey = `${uid}\0${owner}`;
    const ownerUidKey = `${owner}\0${uid}`;

    const matched = table[uidOvnerKey];

    if (matched) {
      delete table[uidOvnerKey];
      result.push(matched.createdAt > createdAt ? matched : current);
    } else {
      table[ownerUidKey] = current;
    }
  };
  
  return Object.values(table).concat(result);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы