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

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

其实这种问题或者场景,要是针对删除字符串重复的字符,这个可以用正则表达式实现,那么这个需要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通用删除数组中重复的值和删除字符串中重复的字符的更多相关文章

  1. Array.prototype.removeBeginWithVal(删除数组内以某值开头的字符串对象)

    Array扩展方法: //author: Kenmu //created time: 2015-03-16 //function: 删除数组内以某值开头的字符串对象 Array.prototype.r ...

  2. SVN版本冲突中 Files 的值“ < < < < < < < .mine”无效路径中具有非法字符的解决办法

    .NET 中 SVN版本冲突中 Files 的值“ < < < < < < < .mine”无效路径中具有非法字符的解决办法: 一. 1.将项目逐个进行编译, ...

  3. 使用Dictionary键值对判断字符串中字符出现次数

    介绍Dictionary 使用前需引入命名空间 using System.Collections.Generic Dictionary里面每一个元素都是一个键值对(由两个元素组成:键和值) 键必须是唯 ...

  4. gradle文件中自定义字段值在java代码中使用

    1. 在build.gradle 中  buildConfigField  的参数有3个 第一个类型 第二个为名称 第三个是值 如果是字符串类型 请不要忘记 双引号! buildTypes {     ...

  5. C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字

            /// 去掉字符串中的数字           public static string RemoveNumber(string key)           {            ...

  6. JS中substring()方法(用于提取字符串中介于两个指定下标之间的字符)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. [Visual Studio]项目属性中继承的值怎么删除

    遇到一个问题,莫名奇妙编译,却出错"找不到包含文件<winapifamily.h>",之前从没出过问题啊!百思不得其解. 研究包含winapifamily的位置,发现有 ...

  8. Oracle查询结果中:一列中相同的值或一列中重复的值,只显示一次

    http://www.itpub.net/thread-1768915-1-1.html 问题: CREATE TABLE test(ob_id VARCHAR(32),ob_name VARCHAR ...

  9. html中设置data-*属性值 并在js中进行获取属性值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. Codeforces 708A Letters Cyclic Shift

    A. Letters Cyclic Shift time limit per test:1 second memory limit per test:256 megabytes input:stand ...

  2. C++编程练习(4)----“实现简单的栈的链式存储结构“

    如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈:反之,如果它的变化在可控范围内,使用顺序栈会好一些. 简单的栈的链式存储结构代码如下: /*LinkStack.h*/ #i ...

  3. matab plot指令和低通滤波器的响应图

    一.plot额外的四个属性模板使用 代码 % 提示 disp ('该功能练习plot额外四个属性功能'); %初始化快捷式数组 figure(); x=:pi/:*pi; y=exp(*sin(x)) ...

  4. 用keychain这个特点来保存设备唯一标识。

    由于IOS系统存储的数据都是在sandBox里面,一旦删除App,sandBox也不复存在.好在有一个例外,那就是keychain(钥匙串). 通常情况下,IOS系统用NSUserDefaults存储 ...

  5. SUI Mobile

    <header class="bar bar-nav"> <h1 class='title'>只有图标的表单</h1> </header& ...

  6. php小测试,难点与分享

    B/S(网页程序) 网页结构,依托游览器 C/S(客户端程序) 单引号和双引号包含字符串的区别: 双引号里面可以解析变量,比如: $a=555; echo "你好{$a}"; 输出 ...

  7. 初学jQuery之jQuery事件与动画

    今天我们就谈谈jquery中的事件和简单动画吧,它们毕竟基础是进阶华丽的根本!! 1.事件 1.window事件 ready   准备就绪 2.鼠标事件 方法                      ...

  8. 自行搭建私有云ownCloud,启用SSL,其他配置

    ownCloud简介 ownCloud(官网)是一款开源的私有云框架,可以通过它实现个人网盘的功能,如果拥有一个性能不错的VPS,那么就可以摆脱奇慢无比的百度云等网盘啦!我花了大约一天的时间总算搭好了 ...

  9. 简洁美观的Java博客系统Tale开源了,让每一个有故事的人更好的表达想法

    Tale Tale的英文含义为故事,我相信每个坚持写Blog的人都是有故事的:中文你叫它 塌了 也无所谓 . Tale 使用了轻量级mvc框架 Blade 开发,默认主题使用了漂亮的 pinghsu, ...

  10. PHP结合memcacheq消息队列解决并发问题

    在处理业务逻辑时有可能遇到高并发问题,例如商城秒杀.微博评论等.如果不做任何措施可能在高瞬间造成服务器瘫痪,如何解决这个问题呢?队列是个不错的选择.队列(Queue)又称先进先出(First In F ...