在我的应用程序中,我有一个这样的数组:
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
的对象。
我也在这里创建一个jsbin。
答案 0 :(得分:2)
使用下划线:
_.chain(arr)
.sortBy(function(d) { return !d.deny })
.uniq(function(d) { return d.id })
.value()
按deny
排序(首先是真值),然后是uniq
上的id
。下划线的implementation of uniq
保留每个键的第一个匹配值。因此,如果给定的id
的值为deny: true
,则会保留该值。如果没有,则保留第一个值为deny
的任何值。