任何人都可以解释为什么这不起作用?

时间:2018-03-31 12:34:35

标签: javascript arrays

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



some_name.py




返回false并且仅记录第一个用户,即使第一个用户具有属性且值应等于true!它杀了我!!!

感谢。

1 个答案:

答案 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;
&#13;
&#13;

更好的选择是使用Array.every()

&#13;
&#13;
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;
&#13;
&#13;