【问题标题】:Replace splice with filter [duplicate]用过滤器替换接头[重复]
【发布时间】: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


【解决方案1】:

试试这个:

this.error_log = this.error_log.filter(error => error.message.info !== message);

【讨论】:

  • 嗯,这就是问题所在......无论如何它有效:) 我会在 12 分钟内将其标记为答案,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2020-03-02
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多