在下划线中查找对象中的重复项
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 为真。
我该怎么做?
谢谢。
一种方法是
- 链接
result
对象
- 将其传递给
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步就没有必要了
- 将其传递给
groupBy('name')
,后者将按名称对 2 中的数组进行分组
- 将它传递给
filter
并在数组长度> 1 的地方过滤它
- 由于结果是嵌套的,将其传递给
flatten
- 现在
age
重复 3 到 5
使用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);
我有如下对象:
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 为真。
我该怎么做?
谢谢。
一种方法是
- 链接
result
对象 - 将其传递给
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步就没有必要了 - 将其传递给
groupBy('name')
,后者将按名称对 2 中的数组进行分组 - 将它传递给
filter
并在数组长度> 1 的地方过滤它
- 由于结果是嵌套的,将其传递给
flatten
- 现在
age
重复 3 到 5
使用
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);