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

Find duplicates in objects within an object in underscore

本文关键字:对象 查找 下划线      更新时间:2023-09-26

我有一个像下面这样的对象:

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'}
}

我需要检查表中是否已经存在基于名称和年龄的每个对象,如果有重复项,则返回 true。

我该怎么做?

谢谢。

一种方法是

  1. 链接result对象
  2. 将其传递给map,因此我们可以得到一个值数组,即 [{姓名:'约翰', 年龄: 20, 性别:'M'},{姓名:'史密斯', 年龄: 25, 性别:'M'}, {姓名:'约翰', 年龄: 20, 性别:'M'},{姓名:'约翰', 年龄: 22, 性别:'M'},{姓名:'安娜', 年龄: 22, 性别:'F'}]备注:如果您不需要键,即 1:, 2:,则得到结果作为结果 = [对象,对象...]。那么步骤 2 就不是必需
  3. 将其传递给groupBy('name'),将按名称将数组分组为 2
  4. 将其传递给filter并在数组长度> 1 的位置对其进行过滤
  5. 由于结果是嵌套的,因此请将其传递给flatten
  6. 现在重复 3 到 5 进行age
  7. 使用 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);
    

吉斯菲德尔