js数组去重的hash方法


Posted in Javascript onDecember 22, 2016

对于 JavaScript 数组去除重复项,现在有多种方法,其中一种是hash,如下:

if (!Array.prototype.unique) {
 Array.prototype.unique = function () {
 var hash = {}, result = [], item;
 for (var i = 0; i < this.length; i++) {
 item = this[i];
 if ( !hash[item] ) {
 hash[item] = true;
 result.push(item);
 }
 }
 return result;
 };
}

但是该方法并不严谨,无法区分数字 1 和 字符串 '1'

var arr = [0, 1, '1', true, 5, true, false, undefined, undefined, null, null];
arr.unique();

js数组去重的hash方法

修改一下,加上数据类型判断:

if (!Array.prototype.unique) {
 Array.prototype.unique = function () {
 var hash = {}, result = [], type = '', item;
 for (var i = 0; i < this.length; i++) {
 item = this[i];
 type = Object.prototype.toString.call(item);

 if ( !hash[item + type] ) {
 hash[item + type] = true;
 result.push(item);
 }
 }
 return result;
 };
}

js数组去重的hash方法

至少现在对5种原始数据类型的值可以准确去重了,对某些引用类型的值──数组,函数,也可以,但是对象类型──{"name": 1}, {"name": 2}就没法区分了。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 选中文字并响应获取的实现代码
Aug 28 Javascript
JS 如果改变span标签的是否隐藏属性
Oct 06 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
Dec 24 Javascript
js实现checkbox全选和反选示例
May 01 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
Jan 26 Javascript
百度多文件异步上传控件webuploader基本用法解析
Nov 07 Javascript
vue组件 $children,$refs,$parent的使用详解
Jul 31 Javascript
vue slot 在子组件中显示父组件传递的模板
Mar 02 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
Vue实现根据hash高亮选项卡
May 27 Javascript
详解JavaScript 中的批处理和缓存
Nov 19 Javascript
JavaScript实例 ODO List分析
Jan 22 Javascript
JavaScript生成.xls文件的代码
Dec 22 #Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 #Javascript
微信小程序 122100版本更新问题解决方案
Dec 22 #Javascript
JS闭包与延迟求值用法示例
Dec 22 #Javascript
jQuery实现两个select控件的互移操作
Dec 22 #Javascript
JS 调用微信扫一扫功能
Dec 22 #Javascript
Vue实现双向绑定的方法
Dec 22 #Javascript
You might like
PHP 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
?算你??的 PHP 程式大小
2006/12/06 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
可输入的下拉框
2006/06/19 Javascript
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
node.js事件轮询机制原理知识点
2019/12/22 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
python的pstuil模块使用方法总结
2019/07/26 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
使用python绘制二维图形示例
2019/11/22 Python
Python守护进程实现过程详解
2020/02/10 Python
Python flask框架端口失效解决方案
2020/06/04 Python
django中cookiecutter的使用教程
2020/12/03 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
C#的几个面试问题
2016/05/22 面试题
大学学风建设方案
2014/05/04 职场文书
社区工作者演讲稿
2014/05/23 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
解除租赁合同协议书
2016/03/21 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS