【发布时间】:2020-05-15 20:40:50
【问题描述】:
我还没有太多机会使用filter(),但我决定稍微缩短我的代码,不幸的是它并没有像我希望的那样工作。我已经编写了函数来以良好的老式方式从数组中删除元素:
this.error_log.map((error, i) => {
if (error.message.info == message) {
this.error_log.splice(i, 1)
}
})
它实际上工作得很好,但我想重写它来过滤,不幸的是它不起作用,我不知道为什么,谁能解释我在这里做错了什么?
this.error_log.filter(error => error.message.info !== message)
【问题讨论】:
-
看起来不错。你收到了什么?
-
.filter不会改变数组。map也没有,但你正在做一个splice,它确实修改了数组。filter返回结果。使用this.error_log = this.error_log.filter(error => error.message.info !== message)。 -
请务必先检查docs。第一句话说“filter() 方法创建一个新数组”
-
请避免使用
.map之类的东西来简单地遍历数组。每个数组迭代方法都有一个用途和一个含义——使用它们只是为了循环而忽略何时以及为什么应该使用它们,绝对不是好的代码。跨度>
标签: javascript ecmascript-6 filter