Как бы вы фильтровали массив объектов на основе условия - PullRequest
1 голос
/ 10 февраля 2020

У меня есть массив объектов, который выглядит следующим образом

[
  { id: 1, state: 'PURCHASED' },
  { id: 2, state: 'PURCHASED' },
  { id: 3, state: 'SOLD' },
  { id: 1, state: 'SOLD' },
  { id: 4, state: 'PURCHASED' },
  { id: 6, state: 'SOLD' },
  { id: 9, state: 'PURCHASED' }
]

Я хотел бы отфильтровать этот массив так, чтобы я получил элементы, которые были ПОКУПАНЫ , но никогда ПРОДАНО . Выход будет выглядеть примерно так

[
  { id: 2, state: 'PURCHASED' },
  { id: 3, state: 'SOLD' },
  { id: 4, state: 'PURCHASED' },
  { id: 6, state: 'SOLD' },
  { id: 9, state: 'PURCHASED' }
]

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете найти индекс, найдя тот же id, и, если существует, удалите этот элемент.

var data = [{ id: 1, state: 'PURCHASED' }, { id: 2, state: 'PURCHASED' }, { id: 3, state: 'SOLD' }, { id: 1, state: 'SOLD' }, { id: 4, state: 'PURCHASED' }, { id: 6, state: 'SOLD' }, { id: 9, state: 'PURCHASED' }],
    result = data.reduce((r, o) => {
        var index = r.findIndex(q => o.id === q.id);
        if (index === -1) r.push(o);
        else r.splice(index, 1);
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...