以下内容属于个人原创,转载请注明出处,非常感谢!

删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景。还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符,保留其中的一个,并打印出重复的次数。

其实这种问题或者场景,要是针对删除字符串重复的字符,这个可以用正则表达式实现,那么这个需要Web前端开发人员熟悉正则表达式了,要是针对数组,有的人就会想到,我们可以用jion('')转成字符串可以用了。但是这种数组要满足这样的要求才可以,如:['a','b','c','a','b'],这种是可以的!但是这样的数组数据,几乎是可能这样完美的,尤其是数据的数组。比如:[1,123,3,55,54,56,3,123]或['a','ab','a'],大多数都是这样的。这样类型的数组,就不能用正则来弄了!

看了上面的问题,肯定有人会想,能不能写一个通用的,既能删除字符串中重复的字符,也能删除数组中重复的值呢?

恭喜你,找对地方了,在我这里就是一个字有!,但支持到IE9以上标准模式的浏览器(IE9、IE10、IE11等这些版本的企业模式不支持),其他的Chrome、火狐等浏览器就不要去考虑了,因为肯定支持的

代码如下(以下代码用ES6格式写的):

 let getRemoveRepeat = (obj, flag) => {
if (typeof obj === 'undefined') return '传入\"abcab\"或\[\"a\"\,\"b\"\,\"a\"\]';
let str, _map = {}, arr = [], mod = 0;
flag = typeof flag === 'undefined' ? false : flag;
if (obj.constructor === Array) str = obj;
else if (obj.constructor === String) {
mod = 1;
str = obj.split('');
}
str.map(x => {
// 当flag是true,意思就是不区分大小写 比如A和a都要只保留一个,默认区分的
if(flag && typeof x ==='string') x =x.toLocaleLowerCase();
if (!_map[x]) {
_map[x] = 1; //次数为1
arr.push(x);
}
else _map[x] = _map[x] + 1;
});
console.log(_map); //打印出每个值的重复次数
return mod ? arr.join('') : arr;
}

下面是转换成ES5的代码(IE9以上包括IE9在内的标准模式可可以):

 'use strict';
var getRemoveRepeat = function getRemoveRepeat(obj, flag) {
if (typeof obj === 'undefined') return '传入\"abcab\"或\[\"a\"\,\"b\"\,\"a\"\]';
var str = void 0,
_map = {},
arr = [],
mod = 0;
flag = typeof flag === 'undefined' ? false : flag;
if (obj.constructor === Array) str = obj;else if (obj.constructor === String) {
mod = 1;
str = obj.split('');
}
str.map(function (x) {
// 当flag是true,意思就是不区分大小写 比如A和a都要只保留一个,默认区分的
if (flag && typeof x === 'string') x = x.toLocaleLowerCase();
if (!_map[x]) {
_map[x] = 1; //次数为1
arr.push(x);
} else _map[x] = _map[x] + 1;
});
console.log(_map); //打印出每个值的重复次数
return mod ? arr.join('') : arr;
};

下面是测试用例的截图(基于Chrome浏览的Console的面板):

字符串类型的去重

  

数组类型的去重:

  

最新文章

  1. 磁盘操作系统(DOS)
  2. textbox只能输入数字或中文的常用正则表达式和验证方法
  3. Git学习笔记(1)——安装,配置,创建库,文件添加到库
  4. Eclipse 官方简体中文语言包下载地址及安装方法
  5. iOS多线程-03-NSOperation与NSOperationQueue
  6. android 之 animations 动画
  7. Highcharts 本地导出图片 Java
  8. 基于XMPP的即时通信系统的建立(二)— XMPP详解
  9. FFmpeg 2.0编译配置
  10. AngularJS(1)随笔
  11. Python 列表实现字典的get功能
  12. Cannot Create Supplier Site (Address) (文档 ID 1069032.1)
  13. 自己动手写shell之chgrp,chown,chmod
  14. 与众不同 windows phone (13) - Background Task(后台任务)之后台文件传输(上传和下载)
  15. SqlServer表EXCEL数据复制的另一种方法
  16. IAAS-虚拟化技术组件介绍
  17. 学号 20175329 2018-2019-3《Java程序设计》第九周学习总结
  18. mysql中find_in_set的使用
  19. wampServer 安装 Redis 扩展
  20. VS2010.STL::list的一个bug

热门文章

  1. 初识 BFC、 IFC、GFC、FFC
  2. ArcGIS制图表达Representation-制图表达使用须知
  3. python3 - 通过BeautifulSoup 4抓取百度百科人物相关链接
  4. Windows 10 IoT Serials 6 - 如何修改IoTStartupOnBoot.cmd文件
  5. Ionic 2 中创建一个照片倾斜浏览组件
  6. 新手学js的效果图1---( 淘宝等商城货物查看特效)
  7. 实例了解js面向对象的封装和继承等特点
  8. 开发过程中常用到的git命令
  9. Activiti工作流(二)之常用操作
  10. 用JS常规方法是否离开当前页面