最近,我不得不比较两个对象数组并标识相似的对象,就像取两组对象的交集一样。
// List A
const listA = [
{ name: 'John', age: 22, gender: 'male', city: 'Boston', sport: 'Basketball' },
{ name: 'Jane', age: 25, gender: 'female', city: 'Chicago', sport: 'Football' },
...
]
// List B
const listB = [
{ name: 'Tom', age: 20, gender: 'male', city: 'New York', sport: 'Soccer' },
{ name: 'Jane', age: 25, gender: 'female', city: 'Chicago', sport: 'Football' },
...
]
ListA
和ListB
中的项目均没有唯一的id
属性。并且只有两个key-value
对都匹配时,这两个对象才被视为相似。在上面的示例中,Jane
是一个匹配项。
现在,我知道Object Deep Matching是JS中的一个众所周知的问题。对于这种情况,我采用了不同的路线,并计算了两个列表中每个对象的哈希值。为了计算哈希,我将每个键的value
传递给了标准的SHA256哈希函数。例如,listA
中第一个对象的哈希如下。
const objectToHash = { name: 'John', age: 22, gender: 'male', city: 'Boston', sport: 'Basketball' };
// Extract the values
const plainText = 'John22maleBostonBasketball'
// Hash it
const hashed = sha256(plainText) // output: dd3defj3434j23rfjf2402439432
这样,我有两个哈希(或字符串)列表,比较它们变得更加容易。 除非两个对象完全相同,否则它们的哈希值将不会相同。我知道计算哈希值需要大量计算,但这对我的用例来说不是问题。
我想念什么吗?