首页 > 解决方案 > 无法正确过滤 Array.filter

问题描述

尽管关于这个主题有很多线程,但我没有设法使用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)

你能告诉我我做错了什么吗?

标签: javascriptvue.jsvuex

解决方案


基于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))]

推荐阅读