javascript - 为什么在过滤器中使用 if 语句而不是仅返回时会得到不同的输出

标签 javascript

我是 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))

真与假

除了truefalse之外,还有truthyfalsy。这意味着条件语句中的值评估为 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/

相关文章:

javascript - 使用javascript而不是jquery通过src属性获取元素

javascript - typescript : Cannot invoke an expression whose type lacks a call signature

javascript - 插入对象数组属性还会为该对象类的 future 实例设置值

javascript - Controller 之间的 Angular 服务

javascript - 如何使用包含 id、名称和 javascript 的 jQuery 克隆元素?

javascript - 辅助函数不适用于 c3.js 中的多个数据集着色

javascript - 按钮停止多个音轨

javascript - 在 li 中获取特定图像之上的跨度

javascript - 使用 jQuery 替换 HTML 字符串标签

javascript - Angularjs http 从 ASP.NET 获取