编写一个接受布尔值数组的函数hasMoreTrue
如果有更多的真布尔值,函数应该返回true
假布尔值或者有相同的真布尔值作为假布尔值的数目。否则,函数应该返回false
。
如何比较数组长度中一个元素为真或为假的次数?
function hasMoreTrue(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === true) {
return true;
} else {
return false;
}
}
}
console.log(hasMoreTrue([true, true, false])); // true
console.log(hasMoreTrue([true, false, true, false])); // true
console.log(hasMoreTrue([true, false, false, false])); // false
console.log(hasMoreTrue([false])); // false
下面的函数过滤出真布尔值,并检查它们是否超过数组长度的一半,即更真多于假。
function hasMoreTrue(arr) {
return arr.filter((i) => !!i).length >= (arr.length/2);
}
还可以使用reduce和net counter (c):
function hasMoreTrue(arr) {
return arr.reduce(c, v) => c + (v ? 1 : -1), 0) >= 0;
}