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

时间:2016-03-29 01:19:42

标签: javascript object collections underscore.js

我有一个如下的对象:

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 个答案:

答案 0 :(得分:0)

这样做的一种方法是

  1. 链接result对象
  2. 将其传递给map,这样我们就可以获得一系列值,即[{name:'john',年龄:20,性别:'M'},{名称:'smith',年龄:25 ,性别:'M'},{姓名:'john',年龄:20,性别:'M'},{姓名:'john',年龄:22,性别:'M'},{姓名:'anna' ,年龄:22,性别:'F'}] 备注:如果你不需要键,即1:,2:那么得到结果= [object,object ...]。然后不需要第2步
  3. 将其传递给groupBy('name')filter将按名称
  4. 将数组分组
  5. 将其传递给flatten并过滤数组长度> 1
  6. 由于结果是嵌套的,请将其传递给age
  7. 现在为value()
  8. 重复3到5
  9. 使用 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); 提取包装对象的值

    {.........
          doLogin (username, password) {
                .......
                .......
                return this.http.get(api).subscribe(
                        data => {.....}, //enters here
                        err => {.....}
            }
    
  10. JSFIDDLE