Javascript JS:用于来自对象的可组合哈希的哈希函数

Javascript JS:用于来自对象的可组合哈希的哈希函数,javascript,hash,Javascript,Hash,我需要确定对象是否是彼此的超集/子集 给定一个从任意对象生成固定长度字符串哈希的函数hash: const fooHash = hash({foo: "foo"}) const barHash = hash({bar: "bar"}) const fooBarHash = hash({foo: "foo", bar: "bar"}) 是否有合并功能,以便: combine(fooHash, barHash) === fooBarHash ? 如果是,组合函数将如何工作?如果哈希函数是可

我需要确定对象是否是彼此的超集/子集

给定一个从任意对象生成固定长度字符串哈希的函数
hash

const fooHash = hash({foo: "foo"}) 
const barHash = hash({bar: "bar"}) 

const fooBarHash = hash({foo: "foo", bar: "bar"})
是否有
合并
功能,以便:

combine(fooHash, barHash) === fooBarHash
?


如果是,组合函数将如何工作?

如果哈希函数是可逆的,则可以使用以下组合函数:

function combine(obj1hash, obj2hash) {
  return hash(merge(unhash(obj1hash), unhash(obj2hash)));
}

hash
unhash
可以是
JSON.stringify
JSON.parse
merge
是任何合并两个js对象的函数,如。

您所说的combine可能指的是
$.extend(obj1,obj2)
?请注意,OP要求的是一个读取“字符串散列”的函数。我正在搜索的combine函数应该在散列上运行,而不是在对象上。如果无法反转操作,则不可行。另一方面,您可以不用转换回POJO就可以离开。这可以工作,但是
JSON.stringify
会在循环对象上中断。另外,我没有这么说,但通过散列,我打算使用“固定大小的字符串散列”。对于我的用例,我需要避免序列化整个对象,因为我想快速比较很多对象。我会相应地更新我的问题:)是的,我考虑过了。如前所述,这可能是不可能的。这是一个与密码学相关的问题,而不是javascript问题。我不是密码学专家,但我会说90%是的,这是不可能的。@anatol让我提出一些其他建议。您需要的是一个函数
contains(hash(obj1)、hash(parent))
,当
parent
包含在
obj1
中时,该函数返回true。这可能有更好的机会找到解决方案。