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浮点数乘积运算出现多位小数的解决方法
Feb 17 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
May 10 Javascript
浅谈几种常用的JS类定义方法
Jun 08 Javascript
使用DeviceOne实现微信小程序功能
Dec 29 Javascript
js实现文字列表无缝滚动效果
Jun 23 Javascript
Vue实现动态创建和删除数据的方法
Mar 17 Javascript
vue代理和跨域问题的解决
Jul 18 Javascript
JQuery扩展对象方法操作示例
Aug 21 jQuery
BootStrap table实现表格行拖拽效果
Dec 01 Javascript
js中值引用和地址引用实例分析
Jun 21 Javascript
微信小程序全局变量改变监听的实现方法
Jul 15 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导出Word文档的原理和实例
2013/10/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
详解Python装饰器
2019/03/25 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
django使用channels实现通信的示例
2020/10/19 Python
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
医院护士求职自荐信格式
2013/09/21 职场文书
实习教师自我鉴定
2013/09/27 职场文书
护士求职推荐信范文
2013/11/23 职场文书
小学教师师德感言
2014/02/10 职场文书
学员自我鉴定
2014/03/19 职场文书
寄语学生的话
2014/04/10 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript