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 相关文章推荐
Jquery 高亮显示文本中重要的关键字
Dec 24 Javascript
js以对象为索引的关联数组
Jul 04 Javascript
extjs表格文本启用选择复制功能具体实现
Oct 11 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
Feb 26 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
学习JavaScript鼠标响应事件
Dec 25 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
May 30 Javascript
jQuery1.9+中删除了live以后的替代方法
Jun 17 Javascript
jsp 网站引入外部css或者js失效问题解决
Oct 31 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
Mar 30 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
Nov 08 jQuery
npm scripts 使用指南详解
Oct 08 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python实现购物车功能的方法分析
2017/11/10 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
python正则表达式实例代码
2020/03/03 Python
python实现处理mysql结果输出方式
2020/04/09 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
什么是组件架构
2016/05/15 面试题
采购内勤岗位职责
2013/12/10 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
优秀食品类广告词
2014/03/19 职场文书
艺术节主持词
2014/04/02 职场文书
党性心得体会
2014/09/03 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js