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实现仿银行密码输入框效果的代码
Dec 13 Javascript
select组合框option的捕捉实例代码
Sep 30 Javascript
javascript 简练的几个函数
Aug 29 Javascript
jQuery阻止冒泡和HTML默认操作
Nov 17 Javascript
JavaScript获取/更改文本框的值的实例代码
Aug 02 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
javascript面向对象之定义成员方法实例分析
Jan 13 Javascript
JS数组搜索之折半搜索实现方法分析
Mar 27 Javascript
DVA框架统一处理所有页面的loading状态
Aug 25 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
javascript中的闭包概念与用法实践分析
Jul 26 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 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
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
php页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
详解Python的Django框架中的中间件
2015/07/24 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python3获取cookie常用三种方案
2020/10/05 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
会计自我鉴定
2014/02/04 职场文书
职工运动会感言
2014/02/07 职场文书
大四自我鉴定
2014/02/08 职场文书
公司会计岗位职责
2014/02/13 职场文书
内勤主管岗位职责
2014/04/03 职场文书
文明之星事迹材料
2014/05/09 职场文书
个人事迹材料范文
2014/12/29 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL