Не удается правильно обработать Array.filter - PullRequest
0 голосов
/ 06 декабря 2018

Несмотря на многочисленные темы по теме, мне не удалось удалить элемент массива на основе строк, используя метод Array.filter.Вот метод фильтра в контексте мутации хранилища Vuex.

UPDATE_FILTERS_GEOLOGIES: (state, payload) => {
  if (state.filters.geologies.some(elem => elem === payload)) {
    state.filters.geologies.filter(elem => !elem.includes(payload))
  } else {
    state.filters.geologies.push(payload);
  }
}

Метод фильтра - это вызов, но элемент не удален.В итоге я использовал Array.splice метод:

let position = state.filters.geologies.indexOf(payload);
state.filters.geologies.splice(position, 1)

Не могли бы вы сказать мне, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

на основе MDN:

Метод filter () создает новый массив со всеми элементами, которые проходят тест, реализованный предоставленной функцией.

, так что в основном, чтов вашем коде неправильно то, что:

state.filters.geologies.filter(elem => !elem.includes(payload))

не сохраняется ни в одной переменной, поэтому отфильтрованный массив не используется.чтобы заставить его работать, вам нужно присвоить возвращаемое значение filter.что-то вроде:

state.filters.geologies = state.filters.geologies.filter(elem => !elem.includes(payload))

или, как сказал Владислав:

state.filters.geologies = [...state.filters.geologies.filter(elem => !elem.includes(payload))]
0 голосов
/ 06 декабря 2018

Пока метод splice () не изменяет исходный массив, методы filter (), map () или some () не возвращают новый массив и оставляют исходный массив без изменений.Таким образом, вы можете использовать метод filter (), но тогда вы должны заменить исходный массив возвращаемым массивом.Например:

UPDATE_FILTERS_GEOLOGIES: (state, payload) => {
  let g = state.filter.geologies
  let p = payload

  g.some(e => e === p)
    ? (g = { ...g.filter(e => !e.includes(p)) })
    : g.push(p)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...