首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【消灭代办】第一周 - 敏感词判断

【消灭代办】第一周 - 敏感词判断

作者头像
xing.org1^
发布2018-12-13 16:49:44
7430
发布2018-12-13 16:49:44
举报
文章被收录于专栏:前端说吧前端说吧

11.16问题一:【敏感词判断】

问题描述:

  一堆字符串组成的数组,给你一个字符串,让你去查找这个字符串是否在这个数组当中?

问题关键考点:

  数组匹配,看一个数组中有没有这个字符串。

解决思路:

  遍历数组,拿这个字符串去和数组的项一一比对。

解决方案s:

  方案一:Array.indexOf('关键字');

  做法:利用这个方法,将关键字传入进去,如果在数组中查到,就会返回这个关键字在数组中的下标,如果找不到就会返回 -1(思考,为什么不是null或者undefined?)。

  而下标最小为0,所以只要判断indexOf()的返回值是否大于0即可判断此关键字是否是敏感词。

知识点:数组的indexOf()方法(见参考2)

  indexOf(),(切记这个“O”大写),

  在字符串使用的时候,括号里的关键词可以隐式转换,

  在数组使用的时候,使用全等(===)符号判断。

  第二个参数可选,表示要开始查找的下标位置。数组中表示开始查找的索引位置。

  优缺点及可行性分析:

  缺点1.

  输入【敏感词库】中一摸一样的关键字确实可以屏蔽,但是我稍稍改动敏感词,加一个数字或其他的字,又跳过了屏蔽。这就很尴尬了。。

  比如“数组”这俩字是敏感词,返回下标。但是我输入“数组2”就不算敏感词了,返回的是-1。显然这种判断是不行的。

  这是因为这个方法不会在数组的每一项中再执行indexOf()进行二次匹配。

  缺点2.

  另外的,加入我的【敏感词库】中又数字2是关键字,但当我输入字符串2进行匹配时也是查不到的。这是因为indexOf使用严格相等进行判断。

  缺点3.

  低版本浏览器不支持。。

  方案二:

  上边在解决的时候,一句话点醒了我,说直接用indexOf(“关键字”)去数组中找,他不会做二次判断,但是拿着一个关键字去字符串中找,他就能匹配:

  这就解决了在一段文字中找到个别关键字的问题了。

  所以最后将思路整理成代码:

 1 function filter(value) {
 2     //遍历敏感词数组filter.data
 3     let len = filter.data.length;
 4     for (var i = 0; i < len; i++) {
 5       //判断内容中是否包括敏感词
 6       if (value.indexOf(filter.data[i]) != -1) {
 7         return value;//value为传入的input的value值,如果这个值是敏感词,直接返回这个敏感词,以备后用。
 8       }
 9     }
10     //如果不是敏感词,默认函数不返回值(即undefined),最后判断函数执行的返回值即可。
11   }

  这里用了for循环,也可以forEach遍历数组。个人喜好和追求吧。

  优缺点及可行性分析:

  解决问题的代码就是好代码。可能觉得多了一层for循环,但是indexOf内部应该也是要遍历数组吧。

引申:

搜索功能:

比如我输入一个关键字 "test",返回所有和test有关的信息。就像百度搜索那样的功能。怎么做?

参考:

[1]:网站敏感词过滤的实现(附敏感词库)【跳转

[2]:简单谈谈JS数组中的indexOf方法【跳转

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 11.16问题一:【敏感词判断】
  • 引申:
  • 参考:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档