【问题标题】:Find duplicates in objects within an object in underscore在下划线对象中查找对象中的重复项
【发布时间】:2016-03-29 01:19:41
【问题描述】:

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

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。

我该怎么做?

谢谢。

【问题讨论】:

    标签: javascript object collections underscore.js


    【解决方案1】:

    一种方法是

    1. 链接result 对象
    2. 将它传递给map,这样我们就可以得到一个值数组,即[{name:'jo​​hn', age: 20, sex:'M'},{name:'smith', age: 25, sex :'M'}, {name:'jo​​hn', 年龄: 20, 性别:'M'},{name:'jo​​hn', 年龄: 22, 性别:'M'},{name:'anna', 年龄:22,性别:'F'}] 备注:如果您不需要键,即 1:, 2: 则获取结果为 result = [object, object ...]。那么第二步就不需要了
    3. 将其传递给groupBy('name'),它将按名称将数组分组为 2
    4. 将其传递给filter 并在数组长度> 1 的地方对其进行过滤
    5. 由于结果是嵌套的,所以将其传递给flatten
    6. 现在对age 重复 3 到 5
    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);
      

    JSFIDDLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 2015-05-05
      • 2022-01-24
      相关资源
      最近更新 更多