在javascript中使用underscore.js过滤和唯一对象数组,基于两个属性

时间:2014-08-11 07:44:18

标签: 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对象返回此数组的唯一集合,但如果集合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

1 个答案:

答案 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的任何值。

JSFiddle