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 相关文章推荐
JSON扫盲帖 JSON.as类教程
Feb 16 Javascript
JavaScript对象和字串之间的转换实例探讨
Apr 21 Javascript
如何在指定的地方插入html内容和文本内容
Dec 23 Javascript
js处理php输出时间戳对不上号的解决方法
Jun 20 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 Javascript
JavaScript中获取Radio被选中的值
Nov 11 Javascript
jquery插件Jplayer使用方法简析
Apr 22 Javascript
通过button将form表单的数据提交到action层的实例
Sep 08 Javascript
js前端导出Excel的方法
Nov 01 Javascript
使用classList来实现两个按钮样式的切换方法
Jan 24 Javascript
elementUI同一页面展示多个Dialog的实现
Nov 19 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
Terran剧情介绍
2020/03/14 星际争霸
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
php静态文件生成类实例分析
2015/01/03 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PDO::prepare讲解
2019/01/29 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
javascript实现商品图片放大镜
2019/11/28 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
使用python进行拆分大文件的方法
2018/12/10 Python
Python map及filter函数使用方法解析
2020/08/06 Python
python 图像增强算法实现详解
2021/01/24 Python
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
中学生校园广播稿
2014/01/16 职场文书
空乘英文求职信
2014/04/13 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
离婚协议书怎么写
2015/01/26 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
毕业设计致谢语
2015/05/14 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle