javascript - 尽管函数返回 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 }]
解决方案
Array.filter 返回一个包含过滤值的新数组,它不会更改调用它的实例,请查看文档
所以你会想做这样的事情
this.char.altchars = this.char.altchars.filter(ac => ac != this.altChar);
推荐阅读
- docker - 从 docker 运行 docker 时权限被拒绝 /var/run/docker.sock
- tensorflow2.0 - 无法使用 tensorflow 2.0 保存模型
- cpu-architecture - 2 位分支预测器的状态
- flutter - 如何转换列表
在颤动中输入 int - java - 打开 MySQL 连接
- c# - 从转换器返回一个可空的布尔值到 XAML
- c# - 如何使用 c# winforms 将参数传递给 powershell 脚本?
- ios - SwiftUI - 视图控制器
- swift - swift Xcode 中的部分和单元格
- python - 如何将更新的页面内容传递给另一个函数?