基于两个属性的带下划线.js的javascript中对象的筛选器和唯一数组

基于两个属性的带下划线.js的javascript中对象的筛选器和唯一数组,javascript,arrays,Javascript,Arrays,在我的应用程序中,我有这样一个数组: var arr=[ {id:1,name:"mohammmad",deny:false}, {id:1,name:"mohammmad",deny:false}, {id:1,name:"mohammmad",deny:true}, {id:2,name:"ali",deny:false}, {id:3,name:"reza",deny:true}, {id:2,name:"ali",deny:true} ]; 现在,我想基于对象的id返回此数

在我的应用程序中,我有这样一个数组:

var arr=[
 {id:1,name:"mohammmad",deny:false},
 {id:1,name:"mohammmad",deny:false},
 {id:1,name:"mohammmad",deny:true},
 {id:2,name:"ali",deny:false},
 {id:3,name:"reza",deny:true},
 {id:2,name:"ali",deny:true}
];
现在,我想基于对象的
id
返回此数组的唯一集合,但如果集合具有
true
deny
值,则它必须返回具有
deny=true
的对象。例如:

 {id:1,name:"mohammmad",deny:false},
 {id:1,name:"mohammmad",deny:false},
 {id:1,name:"mohammmad",deny:true},
它使用
id=1
进行过滤,但返回具有
deny=true
的对象。 我也在这里创建了一个

使用下划线:

_.chain(arr)
  .sortBy(function(d) { return !d.deny })
  .uniq(function(d) { return d.id })
  .value()
deny
(首先使用真值)排序,然后在
id
上按
uniq
排序。下划线保留每个键的第一个匹配值。因此,如果给定的
id
的值为
deny:true
,则该值将被保留。如果没有,它将使用
deny
的任何值保留第一个值


如果存在匹配的ID,但没有对象具有
deny:true
,只有
deny:false
,该怎么办?我真正想问的是,我们是否可以删除任何
deny:false
的内容并过滤其余内容?因此它返回
deny:false
我认为unique不会对您有所帮助,因为当您应用
uniq
时,它会过滤重复的内容。