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 相关文章推荐
Prototype源码浅析 String部分(四)之补充
Jan 16 Javascript
json数据与字符串的相互转化示例
Sep 18 Javascript
URL中“#” “?” &amp;“”号的作用浅析
Feb 04 Javascript
利用jQuery实现一个简单的表格上下翻页效果
Mar 14 Javascript
layui table设置前台过滤转义等方法
Aug 17 Javascript
vue如何进行动画的封装
Sep 26 Javascript
在vue中v-bind使用三目运算符绑定class的实例
Sep 29 Javascript
jquery无缝图片轮播组件封装
Nov 25 jQuery
vue 移动端记录页面浏览位置的方法
Mar 11 Javascript
浅谈JavaScript中this的指向问题
Jul 28 Javascript
vue项目接口域名动态获取操作
Aug 13 Javascript
如何通过Proxy实现JSBridge模块化封装
Oct 22 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
php取出数组单个值的方法
2018/03/12 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
Python笔记(叁)继续学习
2012/10/24 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
python去除字符串中的换行符
2017/10/11 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
网络教育自我鉴定
2014/02/04 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
政协会议宣传标语
2014/10/09 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL