我正在寻找最好的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'}]
谢谢!
答案 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.every
与hasOwnProperty
或has
一起使用。