专栏首页前端说吧【消灭代办】第一周 - 敏感词判断

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

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方法【跳转

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JS-Date对象

    xing.org1^
  • js - 伪数组转化为数组的几种方法整理(更新中...)

    伪数组:无法调用数组的方法,但是有length属性,又可以索引获取内部项的数据结构。

    xing.org1^
  • 【本周面试题】第一周

    1、location对象的search属性拿到url中的查询字符串。传到我们提前封装好的getSearch数组中(或者这一步可以也封装到函数中,但那样函数就只能...

    xing.org1^
  • iOS求两个数组里的相同元素

    这个比起直接遍历做得优一点的地方在于先把A数组中元素剔除出来(范围在B内),然后再进行遍历,这也得益于数组已经排好序。

    清墨
  • 下载丨7月数据库技术通讯:LINUX OS配置问题导致数据库重启

    为了及时共享行业案例,通知共性问题,达成共享和提前预防,我们整理和编辑了《云和恩墨技术通讯》,通过对过去一段时间的知识回顾,故障归纳,以期提供有价值的信息供大家...

    数据和云
  • Canvas入门到高级详解(下)

    配套视频请戳:https://www.bilibili.com/video/av26151775/

    老马
  • 后端程序员必备:RocketMQ相关流程图/原理图

    RocketMQ是开源的消息中间件,它主要由NameServer,Producer,Broker,Consumer四部分构成。

    捡田螺的小男孩
  • 为什么 GPU 会成为通用计算的宠儿?

    编者按:文章来源自 Mapd,作者 Jonathan Symonds,AI 研习社编译。 █ 英伟达在 2016 年的强势崛起,GPGPU (GPU 通用计算)...

    AI研习社
  • 自动完成文本框AutoCompleteTextView实现快速输入

    上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的使用。 一、认识AutoCompleteTextV...

    分享达人秀
  • 【算法】快速排序算法的编码和优化

    参考资料 《算法(第4版)》          — — Robert Sedgewick, Kevin Wayne 《啊哈! 算法》              ...

    外婆的彭湖湾

扫码关注云+社区

领取腾讯云代金券