首页 > 解决方案 > 尽管函数返回 false,但 Array.filter() 不过滤元素

问题描述

我正在尝试使用 filter 函数从数组中删除一个元素。这是在 Typescript/Angular6 中,但我认为这个片段通常适用于 JS。

尽管为该元素返回了过滤器函数,但下面的代码似乎并未过滤掉我想要的false元素。至少我认为它会false在比较结果为 false 时返回(见输出)。

详细的手动功能Array.splice()确实可以完成它的工作。我没看到什么?

  public deleteAltChar() {
    console.log(this.char.altchars);
    this.charService.deleteAltChar(this.altChar, this.char)
      .subscribe(data => {
        // THIS DOES NOT WORK
        this.char.altchars.filter(ac => {
            console.log(ac);
            console.log(this.altChar);
            console.log(this.altChar != ac);
            return ac != this.altChar;
        });
        console.log(this.char.altchars);
        // THIS DOES WORK
        // this.char.altchars.forEach(ac => {
        //  if (ac == this.altChar) {
        //      this.char.altchars.splice(this.char.altchars.indexOf(ac), 1);
        //  }
        // });
      });
  }

第一部分的输出:

Array[0: Object { id: 37 }]
Object { id: 37 }
Object { id: 37 }
false
Array[0: Object { id: 37 }]

标签: javascriptangular

解决方案


Array.filter 返回一个包含过滤值的新数组,它不会更改调用它的实例,请查看文档

所以你会想做这样的事情

this.char.altchars = this.char.altchars.filter(ac => ac != this.altChar);

推荐阅读