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 相关文章推荐
jquery1.4后 jqDrag 拖动 不可用
Feb 06 Javascript
利用了jquery的ajax实现二级联互动菜单
Dec 02 Javascript
Javascript 函数parseInt()转换时出现bug问题
May 20 Javascript
Javascript 赋值机制详解
Nov 23 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
JavaScript中join()方法的使用简介
Jun 09 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
深入理解Vue transition源码分析
Jul 30 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
详解基于Wepy开发小程序插件(推荐)
Aug 01 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 Javascript
在vue中通过render函数给子组件设置ref操作
Nov 17 Vue.js
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设计模式 Adapter(适配器模式)
2011/06/26 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP学习记录之数组函数
2018/06/01 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
python实现ip查询示例
2014/03/26 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
大学毕业生简单自荐信
2013/11/05 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
村级四风对照检查材料
2014/08/24 职场文书
2019感恩宣传标语!
2019/07/05 职场文书