javascript - 无法正确过滤 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)
你能告诉我我做错了什么吗?
解决方案
基于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))]
推荐阅读
- sql - SQL 每周创建列(循环?)
- android - 如何从服务器 url 在底部导航视图中设置用户个人资料图像
- computer-science - 格子上的 sum-product 消息传递和带循环的 LDPC 图上的 sum-product 消息传递之间的区别
- microsoft-teams - 带有可配置身份验证服务器的 Microsoft Teams 搜索消息扩展
- reactjs - WebStorm 自动创建 .tsx 时创建 .js 文件
- javascript - Webpack 5 - 未捕获的 ReferenceError:未定义进程
- arrays - 数组中元素的默认值是多少?
- ios - 使用参数错误快速将图像上传到服务器
- docker - 由于 /var/cache/prod/pools/ 文件夹权限问题,Symfony 应用程序突然关闭
- asp.net-core - 如何在 Azure DevOps 管道中使用 ASP.NET Core 依赖项运行 XUnit 测试?