在过去,我创建了一个从字符串生成唯一ID(数字)的函数.今天我发现它不是那么独特.从来没有看到过问题.今天,两个不同的输入生成相同的id(数字).
我在Delphi,C++,PHP和Javascript中使用相同的技术来生成相同的id,因此当项目涉及不同的语言时没有区别.例如,对于HTML id,tempfiles等,这可以很方便地进行通信.
通常,我所做的是计算字符串的CRC16,添加总和并返回它.
例如,这两个字符串生成相同的id(数字):
o.uniqueId( 'M:/Mijn Muziek/Various Artists/Revs & ElBee - Tell It To My Heart.mp3' );
o.uniqueId( 'M:/Mijn Muziek/Various Artists/Dwight Yoakam - The Back Of Your Hand.Mp3');
Run Code Online (Sandbox Code Playgroud)
它们都生成了224904的id.
以下示例是一个javascript示例.我的问题是,我怎样才能避免(稍微改变)它产生重复?(如果您可能想知道'o.'的含义,它是这些函数所属的对象):
o.getCrc16 = function(s, bSumPos) {
if(typeof s !== 'string' || s.length === 0) {
return 0;
}
var crc = 0xFFFF,
L = s.length,
sum = 0,
x = 0,
j = 0;
for(var i = 0; i < L; i++) {
j = s.charCodeAt(i);
sum += ((i + …Run Code Online (Sandbox Code Playgroud) 以下代码是我对相当通用的 javascript 哈希代码实现的尝试。我计划将此代码与哈希表实现(例如 jshashtable)结合使用,该哈希表实现使用 hashCode() (如果它是为键定义的)。我尝试严格遵守 java 的数字、字符串和数组的哈希码实现。
问题:
注意:我知道下面的代码可以利用其他库,例如下划线和 jquery,但我不希望在我的实现中使用任何第三方依赖。这并不是说我对哈希代码库不感兴趣,它们本身可能依赖于 jquery、下划线等。
/**
* Computes a hash code for an object based on a given subset of its fields
* @param obj any type
* @param keys an array of strings representing some subset of the keys in obj or undefined
* @returns {Number} a java-like hash code for obj based on the hash codes of a subset of its fields …Run Code Online (Sandbox Code Playgroud) Javascript/Jquery中是否有一个函数可以从字符串中生成hashtag?我正在寻找几分钟的答案,我找不到它:/也许有其他方法可以做到这一点?我有Symfony 2.4应用程序.
我将表单数据序列化为字符串,例如:
"cloud_adm_dictionary_type%5Bitems%5D%5B0%5D%5BdictName%5D=Otwartabbb&cloud_adm_dictionary_type%5Bitems%5D%5B0%5D%5BdictValue1%5D=fa-comments-o+text-muted&cloud_adm_dictionary_type%5Bitems%5D%5B0%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B1%5D%5BdictName%5D=Wycena&cloud_adm_dictionary_type%5Bitems%5D%5B1%5D%5BdictValue1%5D=fa-comments-o+text-muted&cloud_adm_dictionary_type%5Bitems%5D%5B1%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B2%5D%5BdictName%5D=Negocjacje&cloud_adm_dictionary_type%5Bitems%5D%5B2%5D%5BdictValue1%5D=fa-comments-o+text-muted&cloud_adm_dictionary_type%5Bitems%5D%5B2%5D%5BisDefault%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B2%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B3%5D%5BdictName%5D=Wygrana&cloud_adm_dictionary_type%5Bitems%5D%5B3%5D%5BdictValue1%5D=fa-thumbs-o-up+text-primary&cloud_adm_dictionary_type%5Bitems%5D%5B3%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B4%5D%5BdictName%5D=Przegrana&cloud_adm_dictionary_type%5Bitems%5D%5B4%5D%5BdictValue1%5D=fa-thumbs-o-down+text-danger&cloud_adm_dictionary_type%5Bitems%5D%5B4%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5B_token%5D=3PBJr_pPjHhAIB95N7PUReP5asrXsGwCILAxZLyGTUg deal:738
cloud_adm_dictionary_type%5Bitems%5D%5B0%5D%5BdictName%5D=w%C5%82asnee&cloud_adm_dictionary_type%5Bitems%5D%5B0%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B1%5D%5BdictName%5D=proklienckii&cloud_adm_dictionary_type%5Bitems%5D%5B1%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B2%5D%5BdictName%5D=telemarketing&cloud_adm_dictionary_type%5Bitems%5D%5B2%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B3%5D%5BdictName%5D=mailing&cloud_adm_dictionary_type%5Bitems%5D%5B3%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B4%5D%5BdictName%5D=www&cloud_adm_dictionary_type%5Bitems%5D%5B4%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B5%5D%5BdictName%5D=partner&cloud_adm_dictionary_type%5Bitems%5D%5B5%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B6%5D%5BdictName%5D=nowe+zrodlo&cloud_adm_dictionary_type%5Bitems%5D%5B6%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5Bitems%5D%5B7%5D%5BdictName%5D=Aaa&cloud_adm_dictionary_type%5Bitems%5D%5B7%5D%5BdictActive%5D=1&cloud_adm_dictionary_type%5B_token%5D=3PBJr_pPjHhAIB95N7PUReP5asrXsGwCILAxZLyGTUg"
Run Code Online (Sandbox Code Playgroud)
我想从那里做标签,比如我不知道'462423dfdaak542634'.我稍后需要比较主题标签以查看表单是否已更改.
我有一个应用程序可以进行很多异步操作fetch调用,其中一些是相同的。
我有一个超集函数fetch(例如fetchPlus),通过根据参数为每个请求创建一个伪唯一标识符。这样,我就可以存储结果sessionStorage并访问它。
function fetchCacheStore(hash) {\n const storeItem = \'fetch_\' + hash;\n return {\n getCache: function () {\n return JSON.parse(sessionStorage.getItem(storeItem));\n },\n\n setCache: function (data) {\n sessionStorage.setItem(storeItem, JSON.stringify(data));\n setTimeout(function () { sessionStorage.removeItem(storeItem); }, 25); // Clear the cache item shortly after\n },\n };\n}\n\nfunction fetchPlus() {\n const stringHasher = function (s) { // Adapted from /sf/ask/533152301/#comment94234739_7616484\n for (var i = h = 0; i < s.length; i++) {\n h = Math.imul(31, h) + …Run Code Online (Sandbox Code Playgroud) 我想对字符串进行哈希处理,但我不想实现哈希算法。是否有内置的 JavaScript 函数或可靠的 npm 包来哈希字符串?如果是这样,我如何使用它来哈希字符串?
例如,如果我有
const string = "password";
Run Code Online (Sandbox Code Playgroud)
我想通过某种现成的函数或方法来运行它,就像这样
const hash = hashFunction( string );
Run Code Online (Sandbox Code Playgroud)
然后从中获取哈希值,如下所示
console.log( hash ); //5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
Run Code Online (Sandbox Code Playgroud)
注意:我知道这个问题与这个问题类似,但是那里选择的答案实现了哈希。我专门寻找现成的可靠函数或散列方法。
我使用下面的代码来交叉两个非常大的数组。由于目前需要很长时间,是否有可能提高其性能。
const arr1 = [
{
"number":"123",
"firstName":"John",
"lastName":"Smith",
"email":"test1@test.com",
},
{
"number":"1234",
"firstName":"Chad",
"lastName":"Baker",
"email":"test2@test.com",
}
];
const arr2 = [
{
"number":"12345",
"firstName":"Chad",
"lastName":"Baker",
"email":"test2@test.com",
},
{
"number":"123456",
"firstName":"John",
"lastName":"Smith",
"email":"test1@test.com",
}
]
let arr3 = arr1.filter(a => arr2.some(b => { return a.firstName == b.firstName && a.lastName == b.lastName}));
console.log(arr3);Run Code Online (Sandbox Code Playgroud)