168人参与 • 2024-08-04 • 其它脚本
原文作者:rehan pinjari
翻译:小圆
你是不是在辛苦码字时,看到别人轻松甩出一行 javascript 就搞定难题?那感觉就像变魔术一样!
这就是单行代码的力量。这些简短的代码片段可以非常有效,让你感觉自己像一个javascript 专家。
但是,在开始将多行代码简化成一行代码之前,我们先来分解一下。单行代码是指将复杂功能压缩到一行的简短 javascript 代码片段。它们可以帮助你编写更紧凑的代码,有时甚至也可以提升代码的可读性。说不定还能让其他程序员眼前一亮~
我们现在聚焦于实用且对初学者友好的"单行代码技巧",它们将帮助你快速取得成果。
以下是一些可以添加到你的 javascript 工具箱中的不错选择:
假设你有一个包含测试分数的数组,并且需要找到所有的a(在这个案例中,代表偶数)。一行代码就可以帮到你!
const scores = [85, 92, 73, 98, 80];
const evenscores = scores.filter(num => num % 2 === 0);
// evenscores 将是 [92, 98, 80]
这段代码使用filter
方法来创建一个新数组,该数组仅包含通过测试的元素。
箭头函数(num => num % 2 === 0
)用于检查每个数字是否为偶数。
何时使用: 从数组中过滤掉不需要的元素是一种常见的操作。这种一行代码的方式对于保持数据的清洁非常有价值。
如果你有一个边长数组,并想计算每个正方形的面积。这行代码可以将数组中的每个元素映射(转换)为其平方:
const sidelengths = [5, 3, 7];
const areas = sidelengths.map(num => num * num);
// areas 将是 [25, 9, 49]
map
方法会通过对原始数组中的每个元素调用提供的函数来创建一个新数组,该新数组包含调用函数的结果。在这里,函数是将每个数字平方计算出来。
何时使用: 这种单行代码对于在数组的每个元素上执行数学运算非常有用。
有时你会遇到嵌套数组,比如一个商店产品列表,每个变量都有子项。单行代码可以帮助你展平这些结构:
const nestedgroceries = [
["apples", ["red", "green"]],
["milk", ["whole", "2%"]]
];
const flatgroceries = nestedgroceries.flat(2);
// flatgroceries 将是 ["apples", "red", "green", "milk", "whole", "2%"]
flat
方法(在es6及更高版本中可用)会创建一个新数组,其中包含了所有子数组元素的连接。这可以简化你的数据操作任务。
何时使用: 展平嵌套数组可以更容易地在单一维度上处理数据。
如果你有一份嘉宾列表,但其中包含了一些重复条目。
单行代码可以帮助你确保每位嘉宾都收到唯一的邀请函(避免尴尬的"等等,我有两张?"的情况)。
// 具有重复条目的原始嘉宾列表
const guestlist = ["alice", "bob", "charlie", "alice"];
// 通过将数组转换为set再转换回数组来删除重复项
const uniqueguestlist = [...new set(guestlist)];
// 唯一的guestlist将是["alice","bob","charlie"]
console.log(uniqueguestlist);
这行代码利用了set
的方法。set
存储唯一值。
我们将原始列表中唯一嘉宾的set
元素展开(...
)回一个新数组中。
何时使用: 数据清理通常意味着从数组中移除重复项。这行代码使你的数据保持干净和整洁。
你是否曾经写过一个if...else
语句跨多行,只是为了根据条件赋值?其实还有一种更简洁的方法:
// 定义用户的年龄
const age = 18;
// 根据用户的年龄确定信息
const message = age >= 18 ? "welcome!" : "sorry, not yet.";
// 输出信息
console.log(message);
这段代码使用了三元操作符,这是在单行中编写简短的if-else语句的巧妙方式。
会检查条件(age >= 18)
,并将对应的值("welcome!" 或 "sorry, not yet.")赋给message
变量。
何时使用: 速记条件语句非常适合根据情况执行简单的赋值,同时保持代码的整洁和高效。
单行代码也可以用于文本处理!比如,反转一个字符串,来看看它是否是回文(正读和反读都相同的单词,如"racecar")?
const str = "hello, world!";
const reversedstr = str.split('').reverse().join('');
// reversedstr will be "!dlrow ,olleh"
这行代码将字符串拆分成字符数组,反转数组元素的顺序,然后再将它们重新连接成一个新字符串------所有这些都在一行内完成!
何时使用: 像反转或提取子串这样的字符串处理任务可以通过单行代码简化。
想象一下,你正在创建一个用户资料系统,并需要弄清楚一个特定的属性(比如“email”)是否存在于一个用户对象中。下面这行代码可能会很有帮助:
const user = { name: "alice", age: 30 };
// 检查用户对象是否具有“email”属性
const hasemail = "email" in user;
// hasemail将为false,因为user对象中不存在“email”属性
in
操作符用于检查一个属性是否存在于一个对象中。在这里,我们检查“email”属性是否存在于用户对象中。
何时使用: 基于对象中指定属性的可用性来验证数据是日常开发中常见的情况。这行代码提供了一个直接且简洁的解决方案。
如何创建一个操作来问候用户,但在没有提供名称的情况下给出一个备份值?单行代码可以管理这一点:
const greet = (name = "guest") => `hello, ${name}!`;
console.log(greet());
// 输出: hello, guest!
console.log(greet("bob"));
// 输出: hello, bob!
这行代码使用es6默认参数。这里,如果在调用greet
函数时没有提供名称,则使用默认值"guest
"。
何时使用: 默认参数可以避免在没有正确参数的情况下调用函数时出错,从而使你的代码更易管理。
有时你可能会遇到包含空值或null
元素的数组。单行代码可以帮助你解决:
const numbers = [1, 0, null, 3]; // 原始数组
const compactnumbers = numbers.filter(boolean); // 使用带布尔值的过滤器作为回调函数
// compactnumbers将为【1,3】,因为boolean(1)为true,布尔值(0)为false,布尔值(null)为false,并且布尔值(3)为true
这行代码再次使用了filter
方法。不过,这次filter
使用boolean
构造函数来检查"假值"(如null
、undefined
、0
、空字符串""
和nan
)。
任何计算结果为false
的元素都将被排除在新数组之外。
何时使用:清理数组以移除不必要的元素可以确保你正在处理的是重要的数据。
单行代码甚至可以用来构建操作后确定键的对象。
const prop = "score";
const person = { [prop]: 90 };
// person will be {score: 90}
这行代码使用了计算属性名。在创建对象时,prop
变量的值被用作花括号内的键名。这里允许基于变量或表达式动态创建键。
何时使用:动态对象键对于创建结构未预设的对象很有用。
希望这些单行代码技巧,可以帮助你提升你的 javascript 技能。
虽然,单行代码是不错的技巧,但也需要谨慎使用,以确保在实际应用中代码的清晰性和可维护性。
请持续关注后续内容,我们将更深入地探讨 javascript 概念
(如有侵权,请联系删除)
opentiny 是一套企业级 web 前端开发解决方案,提供跨端、跨框架、跨版本的 tinyvue 组件库,包含基于 angular+typescript 的 tinyng 组件库,拥有灵活扩展的低代码引擎 tinyengine,具备主题配置系统tinytheme / 中后台模板 tinypro/ tinycli 命令行等丰富的效率提升工具,可帮助开发者高效开发 web 应用。
欢迎加入 opentiny 开源社区。添加微信小助手:opentiny-official 一起参与交流前端技术~
opentiny 官网:https://opentiny.design/
opentiny 代码仓库:https://github.com/opentiny/
tinyvue 源码:https://github.com/opentiny/tiny-vue
tinyengine 源码: https://github.com/opentiny/tiny-engine
欢迎进入代码仓库 startinyengine、tinyvue、tinyng、tinycli~ 如果你也想要共建,可以进入代码仓库,找到 good first issue标签,一起参与开源贡献~
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论