【发布时间】:2014-01-05 15:19:58
【问题描述】:
我创建了一个通用函数filter(arr, func),它使用给定函数作为参数过滤数组。只有那些 func(elem) 返回 true 的元素才应该组成一个新数组。
问题在于,如果数组项小于 10,low function 返回 true,如果数组项是布尔值,bool function 返回 true。由于布尔值在 javascript 中返回 1 或 0,这与我的 low function 冲突。
我可以阻止布尔值返回数字吗?或以某种方式将布尔结果排除在low function
var array = [4, 8, 'bob', true, 'stink', 55, false, 'pepo', 11];
function low(val) {
return val < 10;
}
function word(str) {
if(typeof str == 'string')
return true;
}
function bool(b) {
if (typeof b == 'boolean')
return true;
}
function filter(arr, func) {
var newArr = [];
for(var i = arr.length; i >= 0; i--) {
var result = func(arr[i]);
if(result == true) {
newArr.push(arr[i]);
}
}
return newArr;
}
alert(filter(array, low));
【问题讨论】:
-
你应该使用三个 === 与 typeof... 比较时,即 if (typeof myVar === "undefined") { ... }
-
val < 10将始终是true或false,而不是1或0。
标签: javascript function parameters boolean