在下划线中查找对象中的重复项

Find duplicates in objects within an object in underscore

我有如下对象:

result = { 
    1:{name:'john', age: 20, sex:'M'}, 
    2:{name:'smith', age: 25, sex:'M'}, 
    3:{name:'john', age: 20, sex:'M'},
    4:{name:'anna', age: 22, sex:'F'}
}

我需要检查每个基于姓名和年龄的对象是否已经存在于 table 中,如果存在重复则 return 为真。

我该怎么做?

谢谢。

一种方法是

  1. 链接 result 对象
  2. 将其传递给 map,这样我们就可以获得一组值,即 [{name:'john', age: 20, sex:'M'},{name:'smith', 年龄: 25, 性别:'M'}, {姓名:'john', 年龄: 20, 性别:'M'},{姓名:'john', 年龄: 22, 性别:'M'},{姓名:'anna', 年龄: 22, 性别:'F'}] 备注:如果您不需要键,即 1:、2:,则将结果作为 result = [object, object ...]。那么第2步就没有必要了
  3. 将其传递给 groupBy('name'),后者将按名称对 2 中的数组进行分组
  4. 将它传递给filter并在数组长度> 1
  5. 的地方过滤它
  6. 由于结果是嵌套的,将其传递给flatten
  7. 现在 age
  8. 重复 3 到 5
  9. 使用value()提取包裹对象的值

      var duplicate = _.chain(result)
                      .map(function(value, key){return value;})
                      .groupBy('name')
                      .filter(function(array){ return array.length > 1})
                      .flatten()
                      .groupBy('age')
                      .filter(function(array){ return array.length > 1})
                      .flatten()
                      .value()
                      .length > 1 ? true: false ;
    
      console.log(duplicate);
    

JSFIDDLE