我想检查集合中的所有元素是否包含给定属性,并且该属性是否包含truthy值。我编写了以下算法,它在大多数情况下都能正常工作但不是以下示例,我无法弄清楚原因。有人可以帮忙吗?
some_name.py

返回false并且仅记录第一个用户,即使第一个用户具有属性且值应等于true!它杀了我!!!
感谢。
答案 0 :(得分:3)
字符串与true
之间的比较是个问题。而是使用该值作为if
的条件,并将其转换为布尔值。
您还可以跳过hasOwnProperty
检查,因为在尝试获取非现有属性的值时,您将获得假值(undefined
)。此外,当值为麻痹时返回false
,而不是使用continue
来阻止return false
。
function truthCheck(collection, pre) {
for (var i = 0; i < collection.length; i++) {
if (!collection[i][pre]) return false;
}
return true;
}
var result = truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex");
console.log(result);
&#13;
更好的选择是使用Array.every()
:
function truthCheck(collection, pre) {
return collection.every(function(o) {
return o[pre]; // will be falsy if it doesn't exist or the value is falsy
});
}
var result = truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex");
console.log(result);
&#13;