翻译:疯狂的技术宅
https://medium.freecodecamp.o...
本文首发微信公众号:前端先锋
欢迎关注,天天都给你推送新鲜的前端技术文章javascript
引用自 MDN:前端
falsy(虚值)是在 Boolean 上下文中已认定可转换为‘假‘的值.JavaScript 在须要用到布尔类型值的上下文中使用强制类型转换(Type Conversion )将值转换为布尔值,好比:在条件语句或者循环语句中。java
falsy 有时写做 falsey程序员
在 JavaScript 中有不少方法能够从数组中删除元素,可是从数组中删除全部虚值的最简单方法是什么?为了回答这个问题,咱们将仔细研究 truthy 与 falsy 值和类型强制转换。面试
从数组中删除全部虚值。
JavaScript 中的虚值是false
、null
、0
、""
、undefined
和NaN
。
提示:尝试将每一个值转换为布尔值。
function bouncer(arr) { return arr; } bouncer([7, "ate", "", false, 9]);
bouncer([7, "ate", "", false, 9])
应该返回 [7, "ate", 9]
。bouncer(["a", "b", "c"])
应该返回 ["a", "b", "c"]
。bouncer([false, null, 0, NaN, undefined, ""])
应该返回 []
。bouncer([1, null, NaN, 2, undefined])
应该返回 [1, 2]
。理解问题:咱们有一个做为输入的数组。目标是从数组中删除全部的虚值而后将其返回。算法
freeCodeCamp 上的好心人告诉咱们,JavaScript 中的虚值是 false
、 null
、 0
、 ""
、 undefined
和 NaN
。segmentfault
他们也给了咱们一个重要的提示!他们建议将数组的每一个值转换为布尔值以完成此挑战。我认为这个提示很不错!数组
示例/测试用例:前面提供的测试用例告诉咱们,若是输入数组只包含虚值,那么应该只返回一个空数组。这很是简单。微信
数据结构:在这里咱们将坚持使用数组。数据结构
咱们来谈谈.filter()
:
.filter()
建立一个新数组,其中包含经过所提供函数测试的全部元素。
换句话说,.filter()
遍历数组中的每一个元素并保留经过其中某个测试的全部元素。数组中未经过该测试的全部元素都被过滤掉了 —— 被删除了。
若是咱们有一个数组而且只想保留大于 100 的数字,能够用 .filter()
来实现:
let numbers = [4, 56, 78, 99, 101, 150, 299, 300] numbers.filter(number => number > 100) // returns [ 101, 150, 299, 300 ]
咱们再来谈谈那个将每一个元素转换为布尔值的提示。这是一个很好的提示,由于咱们能够用 .filter()
返回只有真值(truthy)的数组。
咱们将经过JavaScript类型转换来实现这一目标。
JavaScript 为咱们提供了将一种数据类型转换为另外一种的有用函数, String()
转换为字符串,Number()
转换为数字,Boolean()
转换为布尔值。
例如:
String(1234) // returns "1234" Number("47") // returns 47 Boolean("meow") // returns true
Boolean()
是咱们完成这个挑战所须要的函数。若是提供给 Boolean()
的参数是真值,那么 Boolean()
将返回 true
。若是提供给 Boolean()
的参数是虚值,那么 Boolean()
将返回 false
。
这对咱们很是有用,由于咱们从指令中知道只有 false
,null
,0
,""
,undefined
和 NaN
在 JavaScript 中是虚值。其余每个值都是真值。知道若是咱们将输入数组中的每一个值都转换为布尔值,就能够删除全部值为 false
的元素,这就知足了此挑战的要求。
算法:
arr
中的哪些值是虚值。代码:
function bouncer(arr) { // Use filter to remove falsy elements from arr. let onlyTruthyValues = arr.filter(element => Boolean(element) === true) // 7 Boolean(7) is true // "ate" Boolean("ate") is true // "" Boolean("") is false // false Boolean(false) is false // 9 Boolean(9) is true // Return the new array. return onlyTruthyValues // [7, "ate", 9] } bouncer([7, "ate", "", false, 9]);
去掉注释并删除局部变量:
function bouncer(arr) { return arr.filter(element => Boolean(element) === true) } bouncer([7, "ate", "", false, 9]);
若是你有其余解决方案或建议,请在评论中分享!