我是 JavaScript 新手,正在学习一些有关高阶函数的知识。我想知道是否有人可以告诉我原因:
function filter_list(arr) {
return arr.filter(function(item) {
return typeof(item) == 'number';
});
}
// input = [1,'a','b',0,15] output = [1,0,15]
但是
function filter_list(l) {
return l.filter(function(item){
if (typeof item == "number") {
return item;
}
});
}
// input = [1,'a','b',0,15] output = [1,15]
我很难看出其中的差异。
最佳答案
过滤器
如果条件为true
,则过滤器返回一个值;如果为false
,则忽略该值
function filter(arr) {
return arr.filter(function(x) {
return x
})
}
const booleans = [false, false, true]
// this logs only "true"
console.log(filter(booleans))
真与假
除了true
和false
之外,还有truthy
和falsy
。这意味着条件语句中的值评估为 true 或 false。您可以阅读更多内容mdn
function getBooleanValue(value) {
return !!value
}
console.log('1 gets cast to:', getBooleanValue(1))
console.log('0 gets cast to:', getBooleanValue(0))
您的代码
第二个代码片段没有返回0
,因为它被强制转换为 false。要获得预期的数组,您必须将返回值从 item
更改为 true
function filter_list(l) {
return l.filter(function(item) {
if (typeof item == "number") {
return true;
}
return false
});
}
console.log(filter_list([1, 'a', 'b', 0, 15]))
关于javascript - 为什么在过滤器中使用 if 语句而不是仅返回时会得到不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47181325/