Удаление объекта из массива, если он уже существует в массиве (в противном случае добавьте его) - PullRequest
0 голосов
/ 17 октября 2018

У меня есть набор флажков, которые пользователь ставит.Флажки передают некоторые данные, идентификатор и имя, которые мне понадобятся позже для сортировки.Поскольку два объекта не равны, даже если они содержат одинаковые значения, я не могу использовать Array.include.

Вот пример данных

[
  {
    "id": 9,
    "name": "age_group_ids"
  },
  {
    "id": 9,
    "name": "age_group_ids"
  },
  {
    "id": 9,
    "name": "earnings_group_ids"
  },
 {
     "id": 3,
     "name": "earnings_group_ids"
  },

]

Это текущая функция (которая будетработать, если элементы не были объектами

const submitFilterDetails = (value) => {
  return async (dispatch,getState) => {
    const currentArray = (getState().filter.filtersArray);

    if(!currentArray.includes(value)) {
      dispatch(addToFiltersArray(value))
    } else {
      dispatch(removeFromFiltersArray(value));
    }

  }
}

Как вы можете отсортировать это, чтобы у меня были только уникальные значения

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы можете использовать find:

YourArray.find(obj => obj.id == value.id && obj.name == value.name);
0 голосов
/ 17 октября 2018
const src = [
  {
    "id": 9,
    "name": "age_group_ids"
  },
  {
    "id": 9,
    "name": "age_group_ids"
  },
  {
    "id": 1,
    "name": "earnings_group_ids"
  },

]

const out = src.reduce((acc, curr) => acc.some(i => i.id === curr.id) ? acc : acc.concat([curr]) , [])
// the `out` variable has 2 unique items
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...