javascript - 为什么 array.filter 返回“ABCDE”和“UHY”
问题描述
我正在做我的项目,突然我发现了这个问题,但不知道为什么。我有数组:
arr=['ABCDE','HOANG','UHY']
然后我用
arr.filter(x=>x.indexOf('H'))
结果将是(2) ["ABCDE", "UHY"]
解决方案
您的初始代码将无法正常工作,因为indexOf
返回一个带有您作为参数传递的字母的索引的整数,而不是一个布尔值(如果它存在或不存在于您的字符串中):
console.log('ABCDE'.indexOf('H')); // -1 (means true)
console.log('HOANG'.indexOf('H')); // 0 (means false)
console.log('UHY'.indexOf('H')); // 1
为避免这种情况,您必须比较indexOf
与 NOT的结果-1
:
var arr = ['ABCDE','HOANG','UHY'];
var result = arr.filter(x=> x.indexOf('H') !== -1);
console.log(result);
如果您使用的是ECMAScript 6,则可以使用 ,String.prototype.includes()
因为它返回一个布尔值而不是索引号。(感谢@Vidushan Chooriyakumaran 的建议)
const arr = ['ABCDE','HOANG','UHY'];
const result = arr.filter(x=> x.includes('H'));
console.log(result);
推荐阅读
- swift - 从 Firebase 下载图片
- f# - 从C#传递一个列表到F#,如何指定参数是一个列表?
- python-3.x - Dataframe中的Upsert函数 - Python
- android - 无法以任何方式加载平台渲染库
- android - FileError {代码:6,消息:“NO_MODIFICATION_ALLOWED_ERR”}
- c# - 单击子网格视图上的编辑时,如何从父网格视图的下拉列表中获取值?
- vba - 我如何使用windev的一些SAP脚本?
- ios - 如何检查是否安装了支持离线下载但不需要完全越狱的应用程序:Ios设备中的iNoJB、TweakBox、Zestia、Emus4u
- java - 线程代码中带有死循环的奇怪问题
- c# - 使用 Excel 模拟 ActiveX 通信