underscore.js查找具有相同属性的对象

时间:2014-08-14 01:55:59

标签: underscore.js

我正在寻找最好的Underscore / JS方法来查看对象数组,如果集合中的所有对象都具有相同值的属性,则返回true或false。 IE:

如果我检查所有' myprop'是平等的。 var myarr = [{myprop:' 123'},{myprop:' 123'},{myprop:' 123'}]。

所以,' myprop'如果每个值都相同,则在每个集合中返回true。

显然这应该返回false: var myarr = [{myprop:' 123'},{myprop:' 357'},{myprop:' 123'}]

谢谢!

3 个答案:

答案 0 :(得分:1)

没有快速和脏的功能,但如果您可以保证所有对象都存在该属性:

_.uniq(_.pluck(myarr, 'myprop')).length == 1

正如djechlin指出的那样,如果你不能保证密钥存在,则上述操作失败。你可以使用:

var myAttrArr = _.pluck(myarr, 'myprop')
myAttrArr.length == myarr.length && _.uniq(myAttrArr).length == 1

您还可以使用every一些额外的逻辑:

var checkVar = myarr['myprop'];
var success = checkVar && _.every(myarr, function(myobj) {
   return myobj['myprop'] === checkVar;
});

答案 1 :(得分:1)

您可以使用不受欢迎的every

  

_。every(list,[predicate],[context])别名:all如果返回true   列表中的所有值都通过谓词真值测试。代表   如果存在的话,每一个本地方法。

     

_。every([true,1,null,'yes'],_。identity);   =>假

var myvar1 = [{ myprop:'123'},{ myprop:'123'},{ myprop:'123'}]

_.every(myvar1, function(myvar){return myvar.myprop === '123'});
  

返回true。

var myvar2 = [{ myprop:'123'},{ myprop:'357'},{ myprop:'123'}]

_.every(myvar2, function(myvar){return myvar.myprop === '123'});
  

返回false。

<强> Fiddle

答案 2 :(得分:0)

可以使用两个功能。将Array.prototype.everyhasOwnPropertyhas一起使用。