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 相关文章推荐
判断用户的在线状态 onbeforeunload事件
Mar 05 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 Javascript
js仿百度贴吧验证码特效实例代码
Jan 16 Javascript
jQuery插件pagination实现分页特效
Apr 12 Javascript
jQuery复制表单元素附源码分享效果演示
Sep 30 Javascript
纯JavaScript代码实现移动设备绘图解锁
Oct 16 Javascript
Javascript如何判断数据类型和数组类型
Jun 22 Javascript
基于JavaScript Array数组方法(新手必看篇)
Aug 20 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
js中offset,client , scroll 三大元素知识点总结
Sep 11 Javascript
vue实现前端分页完整代码
Jun 17 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
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
深入Python解释器理解Python中的字节码
2015/04/01 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
python 发送json数据操作实例分析
2019/10/15 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
美的官方商城:Midea
2016/09/14 全球购物
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
装饰资料员岗位职责
2013/12/30 职场文书
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
项目计划书范文
2014/01/09 职场文书
校园新闻广播稿
2014/01/10 职场文书
二年级数学教学反思
2014/01/21 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
《在家里》教后反思
2014/03/01 职场文书
企业口号大全
2014/06/12 职场文书
推广普通话标语
2014/06/27 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers