最新要闻
- 保姆级教程!12306官方详解“免费坐高铁”
- 环球速递!RTX 40系显卡才能“撑得住”!《赛博朋克2077》实现路径光追
- 夏季必备 圈叉潮品纯棉印花T恤/短裤24.9元起
- 【新视野】编程神童立志写最棒的程序改变世界 严重偏科只能选职高 妈妈无奈
- 世界视讯!成龙自豪发声:不是我要去好莱坞 而是好莱坞要我
- “19鑫苑01”到期日期将延期一年
- 焦点简讯:吃日料、听京剧 库克时隔3年再访中国:6年前还去过ofo小黄车总部
- 全球观焦点:酷派新品发布会定档4月3日:三款新机待发
- 世界聚焦:2023增长最快的手机品牌!一加Ace 2首销日销量在第三方平台遥遥领先
- 天天观察:B站弹幕射击《爆裂魔女》5月30日停运 共运营592天
- 任天堂Switch 2不会远了!开发者已收到新主机开发工具
- 世界信息:周日阳光可期抓紧洗晒 下周四冷空气再袭降水将达到中雨
- 世界百事通!比亚迪F品牌再曝谍照 主攻40-60万市场/下半年预售
- 天天资讯:38岁985文科硕士被迫送外卖!本人再发声:已脱下孔乙己长衫 应聘道士被拒
- 云南一县城禁止“脏车入城”:有明显污迹、车轮粘泥不许在城区行驶
- 百元就能畅享8K 流畅清爽无广告!当贝盒子H3视频评测
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球实时:记录--你可能忽略的10种JavaScript快乐写法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
前言
- 代码的简洁、美感、可读性等等也许不影响程序的执行,但是却对人(开发者)的影响非常之大,甚至可以说是影响开发者幸福感的重要因素之一;
- 了解一些有美感的代码,不仅可以在一定程度上提高程序员们的开发效率,有些还能提高代码的性能,可谓是一举多得;
笔者至今难以忘记最开始踏入程序员领域时接触的一段List
内嵌for
的Python代码:
array = [[16, 3, 7], [2, 24, 9], [4, 1, 12]]row_min = [min(row) for row in array ]print(row_min)
这可能就是动态语言非常优秀的一点,而JavaScript同样作为动态语言,其中包含的优秀代码片段也非常之多,比如我们通过JavaScript也可以非常轻松地实现上述的功能:
【资料图】
const array = [[16, 3, 7], [2, 24, 9], [4, 1, 12]]const row_min = array.map(item => Math.min(...item))console.log(row_min)
能写出优秀的代码一直是笔者所追求的,以下为笔者在开发阅读过程积累的一些代码片段以及收集了互联网上一些优秀代码片段,希望对你有所帮助
概述
这里,考虑到有些技巧是大家见过的或者说是已经烂熟于心的,但总归有可能有些技巧没有留意过,为了让大家更加清楚的找到自己想要查阅的内容以查漏补缺,所以这里笔者贴心地为大家提供了一张本文内容的索引表,供大家翻阅以快速定位,如下:
应用场景标题 | 描述 | 补充1 | 补充2 |
---|---|---|---|
数组去重 | 略 | 通过内置数据解构特性进行去重[] => set => [] | 通过遍历并判断是否存在进行去重[many items].forEach(item => (item <不存在于> uniqueArr) && uniqueArr.push(item)) |
数组的最后一个元素 | 获取数组中位置最后的一个元素 | 使用at(-1) | 略 |
数组对象的相关转换 | 略 | 对象到数组:Object.entries() | 数组到对象:Obecjt.fromEntries() |
短路操作 | 通过短路操作避免后续表达式的执行 | a或b :a真b不执行 | a且b :a假b不执行 |
基于默认值的对象赋值 | 通过对象解构合并进行带有默认值的对象赋值操作 | {...defaultData, ...data} | 略 |
多重条件判断优化 | 单个值与多个值进行对比判断时,使用includes 进行优化 | [404,400,403].includes | 略 |
交换两个值 | 通过对象解构操作进行简洁的双值交换 | [a, b] = [b, a] | 略 |
位运算 | 通过位运算提高性能和简洁程度 | 略 | 略 |
replace() 的回调 | 通过传入回调进行更加细粒度的操作 | 略 | 略 |
sort() 的回调 | 通过传入回调进行更加细粒度的操作 | 根据字母顺序排序 | 根据真假值进行排序 |
数组去重
这不仅是我们平常编写代码时经常会遇到的一个功能实现之一,也是许多面试官在考查JavaScript基础时喜欢考查的题目,比较常见的基本有如下两类方法:
1)通过内置数据结构自身特性进行去重
主要就是利用JavaScript内置的一些数据结构带有不包含重复值的特性,然后通过两次数据结构转换的消耗[] => set => []
从而达到去重的效果,如下演示:
const arr = ["justin1go", "justin2go", "justin2go", "justin3go", "justin3go", "justin3go"];const uniqueArr = Array.from(new Set(arr));// const uniqueArr = [...new Set(arr)];
2)通过遍历并判断是否存在进行去重
白话描述就是:通过遍历每一项元素加入新数组,新数组存在相同的元素则放弃加入,伪代码:[many items].forEach(item => (item <不存在于> uniqueArr) && uniqueArr.push(item))
至于上述的<不存在于>
操作,可以是各种各样的方法,比如再开一个for
循环判断新数组是否有相等的,或者说利用一些数组方法判断,如indexOf、includes、filter、reduce等等
const arr = ["justin1go", "justin2go", "justin2go", "justin3go", "justin3go", "justin3go"];const uniqueArr = [];arr.forEach(item => {// 或者!uniqueArr.includes(item)if(uniqueArr.indexOf(item) === -1){uniqueArr.push(item)}})
结合filter()
,判断正在遍历的项的index,是否是原始数组的第一个索引:
const arr = ["justin1go", "justin2go", "justin2go", "justin3go", "justin3go", "justin3go"];const uniqueArr = arr.filter((item, index) => {return arr.indexOf(item, 0) === index;})
结合reduce()
,prev初始设为[]
,然后依次判断cur
是否存在于prev
数组,如果存在则加入,不存在则不动:
const arr = ["justin1go", "justin2go", "justin2go", "justin3go", "justin3go", "justin3go"];const uniqueArr = arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
数组的最后一个元素
对于获取数组的最后一个元素,可能平常见得多的就是arr[arr.length - 1]
,我们其实可以使用at()
方法进行获取
const arr = ["justin1go", "justin2go", "justin3go"];console.log(arr.at(-1)) // 倒数第一个值console.log(arr.at(-2)) // 倒数第二个值console.log(arr.at(0)) // 正数第一个 console.log(arr.at(1)) // 正数第二个
注:node14应该是不支持的,目前笔者并不建议使用该方法,但获取数组最后一个元素是很常用的,就应该像上述语法一样简单...
数组对象的相互转换
- 相信大家比较熟悉的是从对象转换为数组的几种方法如:
Object.keys()
、Object.values()
、Object.entries
; - 但其实还可以通过
Object.fromEntries()
将一个特定数组转换回对象:
const entryified = [ ["key1", "justin1go"], ["key2", "justin2go"], ["key3", "justin3go"] ]; const originalObject = Object.fromEntries(entryified); console.log(originalObject);
短路操作
被合理运用的短路操作不仅非常的优雅,还能减少不必要的计算操作
1)基本介绍
主要就是||
或操作、&&
且操作当第一个条件(左边那个)已经能完全决定整个表达式的值的时候,编译器就会跳过该表达式后续的计算
- 或操作
a || b
:该操作只要有一个条件为真值时,整个表达式就为真;即a
为真时,b
不执行; - 且操作
a && b
:该操作只要有一个条件为假值时,整个表达式就为假;即a
为假时,b
不执行;
2)实例
网络传输一直是前端的性能瓶颈,所以我们在做一些判断的时候,可以通过短路操作减少请求次数:
const nextStep = isSkip || await getSecendCondition();if(nextStep) {openModal();}
还有一个经典的代码片段:
function fn(callback) {// some logiccallback && callback()}
基于默认值的对象赋值
- 很多时候,我们在封装一些函数或者类时,会有一些配置参数。
- 但这些配置参数通常来说会给出一个默认值,而这些配置参数用户是可以自定义的
- 除此之外,还有许许多多的场景会用到的这个功能:基于默认值的对象赋值。
function fn(setupData) {const defaultSetup = {email: "justin3go@qq.com",userId: "justin3go",skill: "code",work: "student"}return { ...defaultSetup, ...setupData }}const testSetData = { skill: "sing" }console.log(fn(testSetData))
如上{ ...defaultSetup, ...setupData }
就是后续的值会覆盖前面key
值相同的值。
多重条件判断优化
if(condtion === "justin1go" || condition === "justin2go" || condition === "justin3go"){// some logic}
如上,当我们对同一个值需要对比不同值的时候,我们完全可以使用如下的编码方式简化写法并降低耦合性:
const someConditions = ["justin1go", "justin2go", "justin3go"];if(someConditions.includes(condition)) {// some logic}
交换两个值
一般来说,我们可以增加一个临时变量来达到交换值的操作,在Python中是可以直接交换值的:
a = 1b = 2a, b = b, a
而在JS中,也可以通过解构操作交换值;
let a = 1;let b = 2;[a, b] = [b, a]
简单理解一下:
- 这里相当于使用了一个数组对象同时存储了a和b,该数组对象作为了临时变量
- 之后再将该数组对象通过解构操作赋值给a和b变量即可
同时,还有种比较常见的操作就是交换数组中两个位置的值:
const arr = ["justin1go", "justin2go", "justin3go"];[arr[0], arr[2]] = [arr[2], arr[0]]
位运算
关于位运算网上的讨论参差不齐,有人说位运算性能好,简洁;也有人说位运算太过晦涩难懂,不够易读,这里笔者不发表意见,仅仅想说的是尽量在使用位运算代码的时候写好注释!
下面为一些常见的位运算操作,参考链接
1 ) 使用&运算符判断一个数的奇偶
// 偶数 & 1 = 0// 奇数 & 1 = 1console.log(2 & 1) // 0console.log(3 & 1) // 1
2 ) 使用~, >>, <<, >>>, |
来取整
console.log(~~ 6.83) // 6console.log(6.83 >> 0) // 6console.log(6.83 << 0) // 6console.log(6.83 | 0) // 6// >>>不可对负数取整console.log(6.83 >>> 0) // 6
3 ) 使用^
来完成值交换
var a = 5var b = 8a ^= bb ^= aa ^= bconsole.log(a) // 8console.log(b) // 5
4 ) 使用&, >>, |
来完成rgb值和16进制颜色值之间的转换
/** * 16进制颜色值转RGB * @param {String} hex 16进制颜色字符串 * @return {String} RGB颜色字符串 */ function hexToRGB(hex) { var hexx = hex.replace("#", "0x") var r = hexx >> 16 var g = hexx >> 8 & 0xff var b = hexx & 0xff return `rgb(${r}, ${g}, ${b})`}/** * RGB颜色转16进制颜色 * @param {String} rgb RGB进制颜色字符串 * @return {String} 16进制颜色字符串 */function RGBToHex(rgb) { var rgbArr = rgb.split(/[^\d]+/) var color = rgbArr[1]<<16 | rgbArr[2]<<8 | rgbArr[3] return "#"+ color.toString(16)}// -------------------------------------------------hexToRGB("#ffffff") // "rgb(255,255,255)"RGBToHex("rgb(255,255,255)") // "#ffffff"
replace()
的回调函数
之前写过一篇文章介绍了它,这里就不重复介绍了,F=>传送
sort()
的回调函数
sort()
通过回调函数返回的正负情况来定义排序规则,由此,对于一些不同类型的数组,我们可以自定义一些排序规则以达到我们的目的:
- 数字升序:
arr.sort((a,b)=>a-b)
- 按字母顺序对字符串数组进行排序:
arr.sort((a, b) => a.localeCompare(b))
- 根据真假值进行排序:
const users = [ { "name": "john", "subscribed": false }, { "name": "jane", "subscribed": true }, { "name": "jean", "subscribed": false }, { "name": "george", "subscribed": true }, { "name": "jelly", "subscribed": true }, { "name": "john", "subscribed": false }];const subscribedUsersFirst = users.sort((a, b) => Number(b.subscribed) - Number(a.subscribed))
本文转载于:
https://juejin.cn/post/7203243879255277623
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
关键词:
-
今亮点!商品日报(3月31日):焦炭低位反弹菜油补涨 纸浆、玻璃主力合约跌超2%
国内商品期货市场3月31日涨多跌少。截至下午收盘,追踪国内商品市场的中证商品期货价格指数收报1373 98...
来源: 【全球热闻】网络时钟同步设备(NTP时间同步服务器)技术设计应用方案
全球实时:记录--你可能忽略的10种JavaScript快乐写法
聚焦:无所畏惧的求和题解
今亮点!商品日报(3月31日):焦炭低位反弹菜油补涨 纸浆、玻璃主力合约跌超2%
保姆级教程!12306官方详解“免费坐高铁”
环球速递!RTX 40系显卡才能“撑得住”!《赛博朋克2077》实现路径光追
夏季必备 圈叉潮品纯棉印花T恤/短裤24.9元起
【新视野】编程神童立志写最棒的程序改变世界 严重偏科只能选职高 妈妈无奈
世界视讯!成龙自豪发声:不是我要去好莱坞 而是好莱坞要我
“19鑫苑01”到期日期将延期一年
Excel批量检查5列数据是否一致(存在不规则空值)
【密码管理器】上海道宁为您提供存储和使用强密码的简单方法工具软件——1Password
【环球报资讯】MQTT协议介绍
世界热资讯!开心档之Go 语言环境安装
DIM中的一些知识点(慢更)
新消息丨每日机构分析:3月31日
全球实时:国家发展改革委:国内汽、柴油价格每吨分别降低335元和320元
焦点简讯:吃日料、听京剧 库克时隔3年再访中国:6年前还去过ofo小黄车总部
全球观焦点:酷派新品发布会定档4月3日:三款新机待发
世界聚焦:2023增长最快的手机品牌!一加Ace 2首销日销量在第三方平台遥遥领先
天天观察:B站弹幕射击《爆裂魔女》5月30日停运 共运营592天
任天堂Switch 2不会远了!开发者已收到新主机开发工具
世界信息:周日阳光可期抓紧洗晒 下周四冷空气再袭降水将达到中雨
每日快讯!卸载SQL Server 2012图文教程
环球报道:你还在手写 join 联表查询?MyBatis-Plus 这样写太香了!
天天新动态:Python 数字类型之 int float
每日观点:收评:两市红盘震荡创指涨0.69% 人工智能板块涨幅居前
世界百事通!比亚迪F品牌再曝谍照 主攻40-60万市场/下半年预售
天天资讯:38岁985文科硕士被迫送外卖!本人再发声:已脱下孔乙己长衫 应聘道士被拒
云南一县城禁止“脏车入城”:有明显污迹、车轮粘泥不许在城区行驶
百元就能畅享8K 流畅清爽无广告!当贝盒子H3视频评测
当前快讯:刘浩存在新片《龙马精神》首映礼上哭了:感谢成龙带自己拍戏
环球今头条!GPT-4被指威胁公共安全!OpenAI遭第三方组织投诉
基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试 - 2/3
【焦点热闻】如何实现根据环境切换不同配置?
数据丢失不用怕,火山引擎 DataLeap 提供排查解决方案
英特尔以强大产品力,迎接生成式AI的广阔机遇
【全球快播报】北京启动存量住房交易“带押过户”模式
热消息:直播间卖卫星 最低200万!罗永浩:真的 把卫星价格打下来
Redmi Note 12 Turbo晒战绩:16GB+1TB开售5分钟超过全行业历史销量之和
每日热闻!这就离谱!A7S3传感器用来拍Vlog 索尼ZV-E1开启预售
vivo X Fold2影像曝光:IMX866主摄、潜望长焦取消
天天实时:一键获取测试脚本,轻松验证“TSBS 时序数据库性能基准测试报告”
天天快看点丨windows系统 批量处理文件名称
Python Django投稿系统代码
环球今头条!日本最早将于2024年度在新东名高速公路部分区间设置自动驾驶车道
环球即时看!小姐姐秒种草!雅迪冠能摩登发布:独创复古女王风
当前速讯:你家乡上榜没?中国省级“癌症地图”出炉:肺癌列第一 “穷癌”下降“富癌”上升
3299元性价比封神!AMD Zen4 104MB缓存锐龙7 7800X3D价格公布
迅雷临时文件读取错误怎么回事?迅雷临时文件读取错误怎么解决?
色带打印机怎么换色带?色带的正确安装方法是什么?
win10版本号与操作系统版本号有什么区别?怎么查看win10版本号?
英雄联盟狮子狗叫什么?英雄联盟狮子狗连招介绍
诺基亚X3上市时间是什么时候?诺基亚X3手机参数
CloudCanal 落地 DB2 数据迁移同步功能
观天下!hdfs disk balancer 磁盘均衡器
全球百事通!Python 应用 - jieba 分词 1:进行批量文本分词_艽野尘梦 better 的博客 - CSDN 博客
全球滚动:数论分块简介
【速看料】Mysql之SQL语句基础1
环球快报:2磅蛋糕是几寸适合多少人吃_2磅蛋糕是几寸
新消息丨贾跃亭宣布历史时刻:为梦想窒息FF 91量产!老外狠拆台展示车架或未全面投产
Windows 11 2024版发布了!首个官方ISO镜像免费下载
环球观点:调查显示:超半数受访者认为学历还是敲门砖
环球今热点:男子将父亲骨灰撒入大海被抓?为啥不能私自撒?
全球消息!庆祝索尼第一方游戏登陆XGP:微软推出Xbox限定主机
交互触摸大屏概念整理
速讯:全网最全的权限系统设计方案,不接受反驳!
要闻速递:[Redis]Redis概述
JSON多层嵌套复杂结构数据扁平化处理转为行列数据
微速讯:飞沫传播图片_飞沫传播
每日讯息!【财经分析】“意料之中”与“预期之外” 一季度债市踌躇中展现韧性
国产商用卫星上架电商:折后200万起
全球讯息:双电机三把锁!比亚迪F品牌“SF”谍照再曝光:或于6月发布
天天通讯!43万起 新一代长轴版奔驰GLC开售 网友:给我一个不买理想L9的理由
当前信息:《流浪地球2》摄影指导:没觉得中国电影比别人差
焦点热议:广东检出1例“恐龙血”:Hh孟买血型系统 比Rh还稀有
宿州埇桥:烧鸡展翅飞出一片“新天地”
Twitter营销教程_编程入门自学教程_菜鸟教程-免费教程分享
世界速递!skywalking插件工作原理剖析
全网最详细中英文ChatGPT-GPT-4示例文档-类比语句智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命
全球观察:利用Jackson序列化实现数据脱敏
特斯拉Model 3起火殃及宝马新车 车主索赔法院如此判决
新疆阿瓦提长绒棉:清爽透气纯棉背心9.9元/件狂促
小伙戒指卡手遇130名消防员演训:正好现场教学 科普一定不能硬拽
每日热门:城会玩!印度法官无法判决向ChatGPT求助 专家称或成全球法院系统标配
专为小姐姐打造!雅迪冠能Q9发布:超级续航+超级好看
环球讯息:清明将至,我省各地倡导文明祭祀育新风—— 追思亲人,如何更好“重情”
当前消息!Microsoft Edge 分屏 推荐
国家统计局:3月份采购经理指数延续扩张走势
世界速看:社保基金2022年四季度新进30股 增持64股
天天快看点丨法拉第未来发布会只展示了个车架 贾跃亭还有这些问题需要回答
女子带孩子吃饭故意往菜里扔头发 店家看监控发现:网友吐槽教坏孩子
号称德国500年纯酿造法!特斯拉推出啤酒GigaBier:3瓶卖667元
全球通讯!微软、索尼等巨头纷纷退出:全球最大游戏展E3宣布取消
当前速看:15.86万元起 新款大众途岳上市:换1.5T发动机、能喝92号油
助力“科技+产业+金融”良性发展 上海首单非公开科创债发行
让退化的森林再获新生
天天滚动:比亚迪不去美国 照样做大哥
世界观速讯丨海底捞2022年营收347亿!“最牛打工妹”杨利娟接任后扭亏为盈赚了13亿
天天热资讯!4G比5G更成熟 越来越多用户认可?三大运营商猛推5G 2025年将连接超10亿