比较两个带有散列的对象

时间:2019-08-07 02:19:41

标签: javascript

最近,我不得不比较两个对象数组并标识相似的对象,就像取两组对象的交集一样。

// 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' },
  ...
]

ListAListB中的项目均没有唯一的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

这样,我有两个哈希(或字符串)列表,比较它们变得更加容易。 除非两个对象完全相同,否则它们的哈希值将不会相同。我知道计算哈希值需要大量计算,但这对我的用例来说不是问题。

我想念什么吗?

0 个答案:

没有答案