jst通用删除数组中重复的值和删除字符串中重复的字符
以下内容属于个人原创,转载请注明出处,非常感谢!
删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景。还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符,保留其中的一个,并打印出重复的次数。
其实这种问题或者场景,要是针对删除字符串重复的字符,这个可以用正则表达式实现,那么这个需要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的面板):
字符串类型的去重

数组类型的去重:

jst通用删除数组中重复的值和删除字符串中重复的字符的更多相关文章
- Array.prototype.removeBeginWithVal(删除数组内以某值开头的字符串对象)
Array扩展方法: //author: Kenmu //created time: 2015-03-16 //function: 删除数组内以某值开头的字符串对象 Array.prototype.r ...
- SVN版本冲突中 Files 的值“ < < < < < < < .mine”无效路径中具有非法字符的解决办法
.NET 中 SVN版本冲突中 Files 的值“ < < < < < < < .mine”无效路径中具有非法字符的解决办法: 一. 1.将项目逐个进行编译, ...
- 使用Dictionary键值对判断字符串中字符出现次数
介绍Dictionary 使用前需引入命名空间 using System.Collections.Generic Dictionary里面每一个元素都是一个键值对(由两个元素组成:键和值) 键必须是唯 ...
- gradle文件中自定义字段值在java代码中使用
1. 在build.gradle 中 buildConfigField 的参数有3个 第一个类型 第二个为名称 第三个是值 如果是字符串类型 请不要忘记 双引号! buildTypes { ...
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
/// 去掉字符串中的数字 public static string RemoveNumber(string key) { ...
- JS中substring()方法(用于提取字符串中介于两个指定下标之间的字符)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- [Visual Studio]项目属性中继承的值怎么删除
遇到一个问题,莫名奇妙编译,却出错"找不到包含文件<winapifamily.h>",之前从没出过问题啊!百思不得其解. 研究包含winapifamily的位置,发现有 ...
- Oracle查询结果中:一列中相同的值或一列中重复的值,只显示一次
http://www.itpub.net/thread-1768915-1-1.html 问题: CREATE TABLE test(ob_id VARCHAR(32),ob_name VARCHAR ...
- html中设置data-*属性值 并在js中进行获取属性值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- WinForm 制作一个简单的计算器
namespace WindowsFormsApplication6 { public partial class Form1 : Form { //存储上次点击了什么按钮,0代表什么都没有点击,1代 ...
- spring 注解配置
要在spring mvc中使用注解需要在*-servlet.xml文件中添加 <mvc:annotation-driver />配置 这个配置会创建DefaultAnnotationHan ...
- Yii框架上传后展示图片
在视图层index.php展示代码中加入[ 'attribute' => 'file', 'format' => 'raw', 'value' => function($model) ...
- 使用EF扩展EntityFramework.BulkInsert实现批量插入
EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率.此种条件下,通常会转回使用 ADO.NET 来完成任务.而EntityFramework.BulkInsert则是利 ...
- 使用devstack搭建openstack Newton 版本的坑
国外源访问速度慢怎么办? 使用国外源,加之带宽紧张,搭建过程是很累的,这里推荐大家使用一下源: devstack包源.:http://git.trystack.cn pip源: [global] in ...
- Hadoop技巧(04):简易处理solr date 时区问题
阅读目录 序 创建collection 模拟程序 示例下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的, ...
- C/C++中慎用宏(#define)
宏的定义在程序中是非常有用的,但是使用不当,就会给自身造成很大的困扰.通常这种困扰为:宏使用在计算方面. 本例子主要是在宏的计算方面,很多时候,大家都知道定义一个计算的宏,对于编译和编程是多么的有用. ...
- java作业—3
动手动脑: 一.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. 方法1(数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例:(int)(1+Math.r ...
- 2017年2月22日-----------乱码新手自学.net 之Entity Framework 增删改
由于我是自学的,没有人教,在网上查资料也查不到个所以然.问大神们也是爱理不理的. 所以这篇随笔纯粹源自于我自己的认识.是否真正正确我也没有把握. 如果有什么错误,请大神们给予指正 ========== ...
- 从Angular2路由引发的前后端路由浅谈
笔者的学习进度比较慢,直到两年以前写的网站都还是以服务端为主导的,即网站的所有视图都由服务器视图模板来渲染,笔者使用的是 DotNet MVC,开发套路就是在Controller里面写Action,在 ...