首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么array.filter返回“ABCDE”和"UHY“

为什么array.filter返回“ABCDE”和"UHY“
EN

Stack Overflow用户
提问于 2019-12-13 23:10:14
回答 3查看 58关注 0票数 0

我正在做我的项目,突然我发现了这个问题,但不知道为什么。我有数组:

代码语言:javascript
复制
arr=['ABCDE','HOANG','UHY']

然后我使用

代码语言:javascript
复制
arr.filter(x=>x.indexOf('H'))

结果将是(2) ["ABCDE", "UHY"]

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-13 23:14:14

您的初始代码将不能正常工作,因为indexOf返回一个带有您作为参数传递的字母索引的整数,而不是一个布尔值(如果它在您的字符串中存在或不存在):

代码语言:javascript
复制
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的结果进行比较

代码语言:javascript
复制
var arr = ['ABCDE','HOANG','UHY'];

var result = arr.filter(x=> x.indexOf('H') !== -1);

console.log(result);

如果使用的是ECMAScript 6,则可以使用String.prototype.includes(),因为它返回的是布尔值而不是索引号。(感谢@Vidushan Chooriyakumaran的建议)

代码语言:javascript
复制
const arr = ['ABCDE','HOANG','UHY'];

const result = arr.filter(x=> x.includes('H'));

console.log(result);

请注意,因为我在这里假设使用ES6,所以我也使用const而不是var

票数 4
EN

Stack Overflow用户

发布于 2019-12-13 23:13:53

当index of没有找到匹配的元素(在本例中是字母H)时,它返回-1。因为-1是真值!!-1 === true,所以第一项不会被过滤掉。但是,H字母是HOANG (索引0)和!!0 === false中的第一个项目。

筛选出indexOf返回-1的项目

代码语言:javascript
复制
const arr=['ABCDE','HOANG','UHY']

const result = arr.filter(x=>x.indexOf('H') !== -1)

console.log(result)

票数 1
EN

Stack Overflow用户

发布于 2019-12-13 23:26:41

当没有匹配项时,indexOf将返回-1。请改用includes

代码语言:javascript
复制
const arr = ['ABCDE','HOANG','UHY'];
const result = arr.filter(x => x.includes('H'));
console.log(result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59325203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档