web前端服务端开发,JavaScript的for循环与双重for循环

更多例子

清理 console.log 这个操作还是太简单了,我再举一个栗子!

我们经常使用这样的枚举列表:

const list = [

{

text: “A策略”,

value: 1,

tips: “Atip”,

},

{

text: “B策略”,

value: 2,

tips: “Btip”,

},

{

text: “C策略”,

value: 3,

tips: “Ctip”,

},

];

复制代码

突然有一天,为了统一代码里的各种枚举,我们需要把 text 属性更名为 name,把 value 属性更名为 id,这个用正则很难精确匹配容易误伤,操作AST树还有些麻烦,用 GoGoCode 只需要这么替换一下就行了:

const $ = require(‘gogocode’)

const input = `

const list = [

{

text: “A策略”,

value: 1,

tips: “Atip”,

},

{

text: “B策略”,

value: 2,

tips: “Btip”,

},

{

text: “C策略”,

value: 3,

tips: “Ctip”,

},

];

// ts的类型标记,这种正则替换会被错误替换的,在 gogocode 里就不会

const text: string = ‘’

// 这一段因为没有 value 就不会被选择器匹配到,也不会被错误替换

const cfg = {

text: ‘’

}

`

const output = $(input2).replace(

‘{ text: $$1, value: $$2, $$$ }’,

‘{ name: $$1, id: $$2, $$$ }’

).generate();

复制代码

其中 $_$1$_$2 相当于正则中的通配符,但是在这里只会匹配代码里有效的 AST 节点,$$$ 则可以匹配剩下的节点,有点像 es6 里的 ... ,这段代码匹配出了 textvalue 这对应的值填给了 nameid,剩下的原封不动放回去。

而下半部分我刻意加了一些「干扰代码」,以往我通过字符串替换 text:name:的土办法遇到这样的就会误伤了,但 GoGoCode 不会。

再看前一段社区里的一个例子

正巧,前一段我在掘金看到了文章 像玩 jQuery 一样玩 AST,里面介绍了一个用 jscodeshift 进行 React jsx 代码转换的例子:

打算对这样一份代码做修改:

  • 从 @alifd/next 导入改成 antd

  • 转译前 改成 转译后

  • Button 中 type 参数转换:normal -> default,medium -> middle

  • Button 中有 text 参数的改成 type=“link”

  • Button 中warning 参数的改成 danger

import * as React from ‘react’;

import styles from ‘./index.module.scss’;

import { Button } from “@alifd/next”;

const Btn = () => {

return (

转译前

Normal

Prirmary

Secondary

Normal

Primary

Secondary

Normal

);

};

export default Btn;

复制代码

大概是这样:

这种需求其实挺常见的,原文提供了一个 基于 jscodeshift 的实现,深入到了 AST 进行操作,但如果用 GoGoCode 就会直观很多:

// 省略依赖和 input

const output = $(input)

.replace(import { $$$ } from "@alifd/next", import { $$$ } from "antd")

.replace(<h2>转译前</h2>, <h2>转译后</h2>)

.replace(

<Button type="normal" $$$></Button>,

<Button type="default" $$$></Button>

)

.replace(

<Button size="medium" $$$></Button>,

<Button size="middle" $$$></Button>

)

.replace(<Button text $$$></Button>, <Button type="link" $$$></Button>)

.replace(<Button warning $$$></Button>, <Button danger $$$></Button>)

.generate();

复制代码

相信你不要讲解也能知道这段代码是要做什么了~

开源了,希望能得到大家的反馈

我觉得这个项目挺有趣的,可以说是专门给代码做了一个 replace 程序,小姐姐说我看到得太浅显,其实这个项目不仅仅是 replace 这一招,这个项目支撑了我们几个几万行前端工程的架构升级计划,就算需求更复杂也是有办法搞定的,大家可以关注我们的账号或专栏,后面作者会发表更专业全面的介绍文章。

小姐姐是我们阿里妈妈 MUX 团队的叶兮,我们团队以前有过 iconfontRapMockJS 这样受到社区欢迎的项目,这一次我们把 GoGoCode 也开源到 Github:github.com/thx/gogocod…,希望能对同样有大量代码修改需求的朋友有所帮助。

我们很希望了解到大家会经常遇到怎样的转换难题,如果你用现在 GoGoCode 不方便解决或者出了错,希望你能提给我们(issue:github.com/thx/gogocod… )。

最后:新项目求 star 支持!

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里免费领取前端全套学习资料

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后的最后

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
需要完整面试题的朋友可以点击蓝色字体免费获取

大厂面试题

面试题目录

mg-ultBfgyq-1713604496072)]

最后的最后

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
需要完整面试题的朋友可以点击蓝色字体免费获取

[外链图片转存中…(img-c5tZa371-1713604496072)]

[外链图片转存中…(img-8dGoOVgp-1713604496072)]

[外链图片转存中…(img-fBTf71iC-1713604496073)]

[外链图片转存中…(img-iSCfaJqy-1713604496073)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值