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 相关文章推荐
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
js限制textarea每行输入字符串长度的代码
Oct 31 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
Nov 07 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
浅谈javascript回调函数
Dec 07 Javascript
js实现DOM走马灯特效的方法
Jan 21 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
Mar 18 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
Feb 15 Javascript
Node.js常用工具之util模块
Mar 09 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
Jul 18 Javascript
详解webpack require.ensure与require AMD的区别
Dec 13 Javascript
在vue中v-bind使用三目运算符绑定class的实例
Sep 29 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
世界收音机发展史
2021/03/01 无线电
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
jQuery之网页换肤实现代码
2011/04/30 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python输入二维数组方法
2018/04/13 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
OpenCV 边缘检测
2019/07/10 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
《母鸡》教学反思
2014/02/25 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
合理化建议书
2015/02/04 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL