আমি চোখের পাতা এবং কিমখা থেকে উত্তরগুলি একত্রিত করেছি।
নিম্নলিখিতটি একটি কৌণিক সেবার পরিষেবা এবং এটি সংখ্যা, স্ট্রিং এবং অবজেক্টগুলিকে সমর্থন করে।
exports.Hash = () => {
let hashFunc;
function stringHash(string, noType) {
let hashString = string;
if (!noType) {
hashString = `string${string}`;
}
var hash = 0;
for (var i = 0; i < hashString.length; i++) {
var character = hashString.charCodeAt(i);
hash = ((hash<<5)-hash)+character;
hash = hash & hash; // Convert to 32bit integer
}
return hash;
}
function objectHash(obj, exclude) {
if (exclude.indexOf(obj) > -1) {
return undefined;
}
let hash = '';
const keys = Object.keys(obj).sort();
for (let index = 0; index < keys.length; index += 1) {
const key = keys[index];
const keyHash = hashFunc(key);
const attrHash = hashFunc(obj[key], exclude);
exclude.push(obj[key]);
hash += stringHash(`object${keyHash}${attrHash}`, true);
}
return stringHash(hash, true);
}
function Hash(unkType, exclude) {
let ex = exclude;
if (ex === undefined) {
ex = [];
}
if (!isNaN(unkType) && typeof unkType !== 'string') {
return unkType;
}
switch (typeof unkType) {
case 'object':
return objectHash(unkType, ex);
default:
return stringHash(String(unkType));
}
}
hashFunc = Hash;
return Hash;
};
ব্যবহারের উদাহরণ:
Hash('hello world'), Hash('hello world') == Hash('hello world')
Hash({hello: 'hello world'}), Hash({hello: 'hello world'}) == Hash({hello: 'hello world'})
Hash({hello: 'hello world', goodbye: 'adios amigos'}), Hash({hello: 'hello world', goodbye: 'adios amigos'}) == Hash({goodbye: 'adios amigos', hello: 'hello world'})
Hash(['hello world']), Hash(['hello world']) == Hash(['hello world'])
Hash(1), Hash(1) == Hash(1)
Hash('1'), Hash('1') == Hash('1')
আউটপুট
432700947 true
-411117486 true
1725787021 true
-1585332251 true
1 true
-1881759168 true
ব্যাখ্যা
আপনি দেখতে পাচ্ছেন যে পরিষেবাটির হৃদয় কিমখা দ্বারা নির্মিত হ্যাশ ফাংশন I আমি স্ট্রিংগুলিতে আরও কিছু প্রকার যুক্ত করেছি যাতে বস্তুর স্ট্রুচার চূড়ান্ত হ্যাশ মানকেও প্রভাবিত করে keys কীগুলি অ্যারে | অবজেক্টের সংঘর্ষ রোধ করতে হ্যাশ করা হয়।
আইলয়েডলেসনেস অবজেক্টের তুলনা স্ব-রেফারেন্সিং অবজেক্টস দ্বারা অনন্য পুনরাবৃত্তি রোধ করতে ব্যবহৃত হয়।
ব্যবহার
আমি এই পরিষেবাটি তৈরি করেছি যাতে আমার কাছে কোনও ত্রুটি পরিষেবা থাকতে পারে যা অবজেক্টের সাহায্যে অ্যাক্সেস করা যায়। যাতে একটি পরিষেবা কোনও প্রদত্ত বস্তুর সাথে ত্রুটি নিবন্ধভুক্ত করতে পারে এবং অন্যটি কোনও ত্রুটি খুঁজে পেয়েছিল কিনা তা নির্ধারণ করতে পারে।
অর্থাত
JsonValidation.js
ErrorSvc({id: 1, json: '{attr: "not-valid"}'}, 'Invalid Json Syntax - key not double quoted');
UserOfData.js
ErrorSvc({id: 1, json: '{attr: "not-valid"}'});
এটি ফিরে আসবে:
['Invalid Json Syntax - key not double quoted']
যদিও
ErrorSvc({id: 1, json: '{"attr": "not-valid"}'});
এই ফিরে আসবে
[]