如何根据对象生成一个唯一标识 - CNode技术社区

如何根据对象生成一个唯一标识
发布于 6 年前 作者 a1292717155 6445 次浏览 来自 问答

需求是这样的,需要通过客户传过来的对象生成一个唯一标识,这样以后客户再传相同的对象,就不用记录到数据库中了. 想问有什么办法生成这样一个唯一表示么?

2 回复

不知道具体需求,撸个参考实现吧(最好别直接复制过去用)

function uniqueId(obj) {
 const arr = [1, 2, 5, 10, 35, 33, 21, 16]; // 任意数量小于36的数,数量=生成标识字符串长度
 let index = 0;
 Object.keys(obj).sort().forEach(it => {
 let val = obj[it];
	if (typeof val === 'object') val = uniqueId(val);
	val = `${val}`;
 Array.prototype.forEach.call(val, (c, i) => {
 arr[index] = (arr[index] + val.codePointAt(i)) % 36;
 index++;
	 index %= arr.length;
 });
 });
 return arr.map(c => c.toString(36)).join('');
}
function test() {
 const objs = [
 { aaa: 123 },
 { bbb: 123, b: true, c: { cc: 'hello' }},
 { aaa: 123 },
 { c: { cc: 'hello' }, bbb: 123, b: true },
 ];
 const result = objs.map(it => uniqueId(it));
 return result;
}
console.log(test());

hash(JSON.stringify(obj))

回到顶部

AltStyle によって変換されたページ (->オリジナル) /