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 读取xml,写入xml 实现代码
Jul 10 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
Mar 01 Javascript
jquery使整个div区域可以点击的方法
Jun 24 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
Dec 04 Javascript
深入理解jQuery 事件处理
Jun 14 Javascript
AngularJs $parse、$eval和$observe、$watch详解
Sep 21 Javascript
jquery append与appendTo方法比较
May 24 jQuery
微信小程序 本地图片按照屏幕尺寸处理
Aug 04 Javascript
js实现Tab选项卡切换效果
Jul 17 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 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编程之高级技巧
2008/08/27 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
js常用函数 不错
2006/09/08 Javascript
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
pandas带有重复索引操作方法
2018/06/08 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
python实现的汉诺塔算法示例
2019/10/23 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
Django choices下拉列表绑定实例
2020/03/13 Python
python实现批量修改文件名
2020/03/23 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
用python批量移动文件
2021/01/14 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技