Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何删除 JavaScript 数组中的虚值[每日前端夜话0x55]

如何删除 JavaScript 数组中的虚值[每日前端夜话0x55]

作者头像
疯狂的技术宅
发布于 2019-05-06 07:04:54
发布于 2019-05-06 07:04:54
11.7K00
代码可运行
举报
文章被收录于专栏:京程一灯京程一灯
运行总次数:0
代码可运行

正文共:1126 字

预计阅读时间:6 分钟


翻译:疯狂的技术宅 原文:https://medium.freecodecamp.org/how-to-remove-falsy-values-from-an-array-in-javascript-e623dbbd0ef2

Photo by Vincent van Zalinge on Unsplash

引用自 MDN:

falsy(虚值)是在 Boolean 上下文中已认定可转换为‘假‘的值. JavaScript 在需要用到布尔类型值的上下文中使用强制类型转换(Type Conversion )将值转换为布尔值,比如:在条件语句或者循环语句中。 falsy 有时写作 falsey

在 JavaScript 中有很多方法可以从数组中删除元素,但是从数组中删除所有虚值的最简单方法是什么?为了回答这个问题,我们将仔细研究 truthy 与 falsy 值和类型强制转换


算法说明

从数组中删除所有虚值。 JavaScript 中的虚值是 falsenull0""undefinedNaN。 提示:尝试将每个值转换为布尔值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1function bouncer(arr) {
2  return arr;
3}
4
5bouncer([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]

解决方案:.filter( ) 和 Boolean( )

理解问题:我们有一个作为输入的数组。目标是从数组中删除所有的虚值然后将其返回。

freeCodeCamp 上的好心人告诉我们,JavaScript 中的虚值是 falsenull0""undefinedNaN

他们也给了我们一个重要的提示!他们建议将数组的每个值转换为布尔值以完成此挑战。我认为这个提示很不错!

示例/测试用例:前面提供的测试用例告诉我们,如果输入数组只包含虚值,那么应该只返回一个空数组。这非常简单。

数据结构:在这里我们将坚持使用数组。

我们来谈谈.filter()

.filter()创建一个新数组,其中包含通过所提供函数测试的所有元素。

换句话说,.filter() 遍历数组中的每个元素并保留通过其中某个测试的所有元素。数组中未通过该测试的所有元素都被过滤掉了 —— 被删除了。

如果我们有一个数组并且只想保留大于 100 的数字,可以用 .filter() 来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1let numbers = [4, 56, 78, 99, 101, 150, 299, 300]
2numbers.filter(number => number > 100)
3// returns [ 101, 150, 299, 300 ]

我们再来谈谈那个将每个元素转换为布尔值的提示。这是一个很好的提示,因为我们可以用 .filter() 返回只有真值(truthy)的数组。

我们将通过JavaScript类型转换来实现这一目标。

JavaScript 为我们提供了将一种数据类型转换为另一种的有用函数, String()转换为字符串,Number() 转换为数字,Boolean() 转换为布尔值。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1String(1234)
2// returns "1234"
3Number("47")
4// returns 47
5Boolean("meow")
6// returns true

Boolean() 是我们完成这个挑战所需要的函数。如果提供给 Boolean() 的参数是真值,那么 Boolean() 将返回 true 。如果提供给 Boolean() 的参数是虚值,那么 Boolean() 将返回 false

这对我们非常有用,因为我们从指令中知道只有 falsenull0""undefinedNaN 在 JavaScript 中是虚值。其他每一个值都是真值。知道如果我们将输入数组中的每个值都转换为布尔值,就可以删除所有值为 false 的元素,这就满足了此挑战的要求。

算法

  1. 确定 arr 中的哪些值是虚值。
  2. 删除所有虚值。
  3. 返回仅包含真值(truthy)的新数组。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1function bouncer(arr) {
 2  // Use filter to remove falsy elements from arr.
 3  let onlyTruthyValues = arr.filter(element => Boolean(element) === true)
 4  //                                7          Boolean(7) is true
 5  //                                "ate"      Boolean("ate") is true
 6  //                                ""         Boolean("") is false
 7  //                                false      Boolean(false) is false
 8  //                                9          Boolean(9) is true
 9
10  // Return the new array.
11  return onlyTruthyValues
12  //     [7, "ate", 9]
13}
14
15bouncer([7, "ate", "", false, 9]);

去掉注释并删除局部变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1function bouncer(arr) {
2  return arr.filter(element => Boolean(element) === true)
3}
4
5bouncer([7, "ate", "", false, 9]);

如果你有其他解决方案或建议,请在评论中分享!


本文是该系列 freeCodeCamp Algorithm Scripting 的一部分。
本文引用了 freeCodeCamp Basic Algorithm Scripting:Falsy Bouncer。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Salesforce Javascript(三) 小结1
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions
Zero-Zhang
2020/10/10
5970
Salesforce Javascript(三) 小结1
[译]【30秒一个知识点】Array(三)
使用 Array.prototype.filter() 创建包含给定数组中所有下标是n的倍数的元素的新数组。
ConardLi
2019/05/23
5770
truthy
这是因为JavaScript 在布尔值上下文中使用强制类型转换(coercion)
阿超
2022/08/21
3400
truthy
使你的 JavaScript 代码简单易读[每日前端夜话0x4C]
解决一个问题可以有很多方法,但是有些方法很复杂,甚至有些是荒谬的。在本文中,我想谈谈解决一个问题时的好方案和坏方案。
疯狂的技术宅
2019/04/23
6730
【面试题解】JavaScript数据类型相关的六个面试题
本系列面试题旨在学会相关知识点,从而轻松应对面试题的各种形式,本文讲解了 JavaScript 中的一些常见面试题。
一尾流莺
2022/12/10
3390
分享 20 个提升效率的 JavaScript 缩写小技巧
JavaScript中有很多速记技巧,可以缩短代码长度,减少冗余,提高代码的可读性和可维护性。本文将介绍20个提高效率的JS缩写技巧,帮助你告别写垃圾的生活,轻松写出优雅的代码!
前端达人
2023/10/25
4210
分享 20 个提升效率的 JavaScript 缩写小技巧
JavaScript小技巧 - 数组篇
slice[1]第一个参数如果是负数表示从后面开始数起的第几个元素,-1表示倒数第一个元素。
进击的大葱
2022/08/22
3420
浅学前端:JavaScript篇(一)
要表示真正的整数,需要用 bigint,数字的结尾用 n 表示它是一个 bigint 类型
传说之下的花儿
2023/11/08
2770
浅学前端:JavaScript篇(一)
JavaScript 进阶问题列表[每日前端夜话0x95]
来源:https://github.com/lydiahallie/javascript-questions
疯狂的技术宅
2019/07/17
1.4K0
JavaScript 进阶问题列表[每日前端夜话0x95]
图解 == 操作符规则和不同类型间转换规则
图解 == 操作符规则和不同类型间转换规则 很多人包括我在内很抵触这种问题?,因为很长一段时间我一直弄不明白 == 和 === 到底是怎么个规则。如果你也没闹明白 == 和 ===,读了这篇文章应该至
JS菌
2019/04/10
7430
图解 == 操作符规则和不同类型间转换规则
使用JavaScript的一些小技巧
https://www.w3cplus.com/javascript/javascript-tips.html
@超人
2021/02/26
1.7K0
使用JavaScript的一些小技巧
1.2w字 | 初中级前端 JavaScript 自测清单 - 1
前言 最近与部门老大一起面试了许多前端求职者,其中想换个学习氛围较好的人占多数,但良好的学习氛围也是需要一点点营造出来的🌺。 为此我们组建了我们团队内部的“现代 JavaScript 突击队”,第一期学习内容为《现代 JavaScript 教程》系列,帮助小组成员系统地进行学习巩固,并让大家养成系统性学习和输出学习总结的学习方式。 本文作为我输出的第一部分学习总结,希望作为一份自测清单,帮助大家巩固知识,温故知新。 这里也下面分享我们学习小组的“押金制度”和“押金记录表”🍀 [“押金制度”和“押金记录表”]
pingan8787
2020/07/04
1.2K0
JavaScript专题(二)数组去重,会就要会的理直气壮
如果数组中有NaN,你又正好需要判断数组是否有存在NaN,这时你使用indexOf是无法判断的,你必须使用includes这个方法。
全栈程序员站长
2022/07/04
4140
18 个 JavaScript 入门技巧!
最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。
前端小智@大迁世界
2020/12/09
5110
被难倒了! 针对高级前端的8个级JavaScript面试问题
JavaScript 是一种功能强大的语言,也是构建现代 Web 的基础之一。这种强大的语言也有一些自己的怪癖。例如,你知道 0 === -0 会计算为 true,或者 Number("") 会返回 0 吗?
前端小智@大迁世界
2023/09/22
3170
被难倒了! 针对高级前端的8个级JavaScript面试问题
JavaScript真假值知多少
当用`==`比较的时候,似乎不同的值和true都是相等的。因为在比较前JavaScript会把每个值转换成字符串形式:
疯狂的技术宅
2019/03/27
8130
JavaScript真假值知多少
JS 中为啥 ['1', '7', '11'].map(parseInt) 返回 [1, NaN, 3]
Javascript 一直是神奇的语言。 不相信我? 尝试使用map和parseInt将字符串数组转换为整数。打开 Chrome 的控制台(F12),粘贴以下内容,然后按回车,查看输出结果:
前端小智@大迁世界
2019/07/02
5.1K0
安利几个开发JS的小技巧
“ 关注 前端开发社区 ,回复 '领取资源',免费领取Vue,小程序,Node Js,前端开发用的插件以及面试视频等学习资料,让我们一起学习,一起进步
前端老道
2020/05/21
1.6K0
安利几个开发JS的小技巧
前端必备,25个最基本的JavaScript面试问题及答案
1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱?
用户5997198
2019/08/09
1.1K0
您应该知道的11个JavaScript和TypeScript速记
英文 | https://blog.bitsrc.io/11-javascript-and-typescript-shorthands-you-should-know-690a002674e0
winty
2020/10/09
6490
推荐阅读
相关推荐
Salesforce Javascript(三) 小结1
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验