javascript的hashCode函数实现代码小结


Posted in Javascript onAugust 11, 2020

为了使用的方便,稍稍再改良了一下

function hashcode(str) {
 var hash = 0, i, chr, len;
 if (str.length === 0) return hash;
 for (i = 0, len = str.length; i < len; i++) {
  chr  = str.charCodeAt(i);
  hash = ((hash << 5) - hash) + chr;
  hash |= 0; // Convert to 32bit integer
 }
 return hash;
}

hashcode("this is a string")
//-1853110172

这里接受的参数是一个 String,其它类型怎么办?可以先做一个统一的处理,比如

hashcode(JSON.stringify(obj))
序列化之后再使用 hashCode 函数,基本所有类型数据都通吃,除了含有循环嵌套的对象。

PS:
函数实现中有一行使用了 “|” 运算符,只是利用 Bitwise 运算符转换参数为 32bit,用来确保结果是个 32位整数。

这里是Java的直接替代品字符串.hashCode()用Javascript实现的方法。

我编写这个函数是为了满足工作中的一个需求。显然,后端工程师认为hashCode()是一个标准函数。这个项目的一个障碍不仅是如何翻译Java中用来生成hashCode()的数学公式,还包括如何强制Javascript使用32位整数数学(这不是一个小的壮举)。

幸运的是,我发现Java支持位运算符,这些运算符被限制在32位整数数学中。

下面是Javascript生成的字符串原型。使用这个原型,您可以简单地对任何字符串调用.hashCode(),例如“some string”.hashCode(),并接收一个数字哈希代码(更具体地说,是一个Java等效代码),如1395333309。

String.prototype.hashCode = function(){
	var hash = 0;
	if (this.length == 0) return hash;
	for (i = 0; i < this.length; i++) {
		char = this.charCodeAt(i);
		hash = ((hash<<5)-hash)+char;
		hash = hash & hash; // Convert to 32bit integer
	}
	return hash;
}

下面是其它网友的补充

hashCode = function(str){
  var hash = 0;
  if (str.length == 0) return hash;
  for (i = 0; i < str.length; i++) {
    char = str.charCodeAt(i);
    hash = ((hash<<5)-hash)+char;
    hash = hash & hash; // Convert to 32bit integer
  }
  return hash;
}

djb2Code = function(str){
  var hash = 5381;
  for (i = 0; i < str.length; i++) {
    char = str.charCodeAt(i);
    hash = ((hash << 5) + hash) + char; /* hash * 33 + c */
  }
  return hash;
}

sdbmCode = function(str){
  var hash = 0;
  for (i = 0; i < str.length; i++) {
    char = str.charCodeAt(i);
    hash = char + (hash << 6) + (hash << 16) - hash;
  }
  return hash;
}

loseCode = function(str){
  var hash = 0;
  for (i = 0; i < str.length; i++) {
    char = str.charCodeAt(i);
    hash += char;
  }
  return hash;
}

以上就是javascript的hashCode函数实现代码小结的详细内容,更多关于javascript hashCode的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
Apr 21 Javascript
将文本输入框内容加入表中的js代码
Aug 18 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
Nov 02 Javascript
javacript使用break内层跳出外层循环分析
Jan 12 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
js获取页面description的方法
May 21 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
动态加载js、css的简单实现代码
May 26 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
Jan 30 Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
JavaScript实现的拼图算法分析
Feb 13 Javascript
vue axios封装httpjs,接口公用配置拦截操作
Aug 11 #Javascript
解决vue刷新页面以后丢失store的数据问题
Aug 11 #Javascript
封装 axios+promise通用请求函数操作
Aug 11 #Javascript
在vue中使用回调函数,this调用无效的解决
Aug 11 #Javascript
vue 调用 RESTful风格接口操作
Aug 11 #Javascript
vue之封装多个组件调用同一接口的案例
Aug 11 #Javascript
vue接口请求加密实例
Aug 11 #Javascript
You might like
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
php 获取本地IP代码
2013/06/23 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
python实现对输入的密文加密
2019/03/20 Python
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
教师个人自我鉴定
2014/02/08 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书