Hello! Long time no see.

大家好,我,码路工人,打钱

OnlyStudy

  • 公众号为何弃更了?

    码路工人并没有弃更噢。原因和说明:
    本人水平不够,个人时间少 => 产出不足 是一个原因。
    虽然写的不多,但还是有些技术短文的,发布在博客。
    没有第一时间发布在码路工人公众号 CoderPower 上。
    微信公众号发布后不可修改,现在的个人号没有评论功能。
    为了方便工友阅读,会陆续转移过来发布。

  • 公众号主要什么方向?

    写“[身边时事]我们是自贸区了”,
    一是因为确实身边时事,
    二是因为公司月度早会发言不知道说点啥,
    鸡汤不缺,还是写篇时事相关的准备下吧。

    今后主要是想写兴趣技术方向,
    可能与本人工作实际不相关,
    当作技术储备也是好的。
    编码是件有意思的事儿,
    码路同行,快乐相伴!

    再见。


  • Appendix : 码路方向

    • 有趣的前端

      • JavaScript
        • 标准规范,ES6,…ES10
        • 框架工具库设计
        • 了解泛JS脚本语言
      • SPA(单页应用)
        • 前端三大框架(React/Vue/Angular)
        • 全部了解,部分学习+实践
      • Flutter(移动端会是主流?全端的希望?未来之星)
        • 编写一次,多端运行,统一高效才是未来
    • Node:基于JS的全栈

      • 了解Web开发相关原生实现
      • 学习常用框架(express,koa…)
      • 连接前后端的 Middle-Layer 实践
      • Node单独服务端实践
    • Serverless,Micro-Service

    • 固基学习

      • Data Structure and Algorithm
      • Compilers: Principles
    • 其它语言…

    • DotNet系:Core 方向

    • 数据分析、可视化…

※码路工人,程序猿一枚,
 目前工作经历,主要标签CSharper,
 Web接触少,对前端熟手来说完全萌新一匹。

虽然咱会的少,但咱想学的多啊!

“学习狂魔”们,欢迎来撩。

PS:组内发了个小问卷调查,隐藏的一个个学习狂魔啊~

JavaScriptVote

JiNan-New-FreeTradArea

[身边时事]我们是自贸区了

你加征关税,我开自贸区;你想搞颜色?没收你木偶。

(chage date to 2019/09/02)

大家好,我是码路工人。

旧闻回顾

童鞋们,知道我们所在位置这里发生了什么重要的事吗?

上周一,也就是8/26号,国家公布了新设立6个自贸区的消息。
其中一个就是中国(山东)自由贸易试验区。

山东自贸区又包含三个片区,分别是济南片区、青岛片区、烟台片区。
济南片区的范围,大致就是东边的高新区一带。

在山东、江苏、河北新设自贸试验区 => 实现沿海省份自贸区实现全覆盖

广西、云南、黑龙江新设自贸试验区 => 沿边省份首次设立自贸区,主推沿边开放

自贸区

在国际贸易中,买卖并不是你情我愿就可以,在品类、数量以及关税上都是有限制的。

而自贸区的设立,简单地说就是给各成员国取消相关限制,免除关税等优惠。

成为自贸区,给地区带来了政策优势和经济发展机遇,这自不必多说。

今天我们来聊聊出台新自贸区的背景。

背景一,愈演愈烈的中美贸易战

一段对话

  • U:我,特朗普,打钱。
  • C:你,谁啊,有病吧。
  • U:我有病,你有药吗?
  • C:没药,有最新(版)祖传秘方,你想试试吗?

另一段对话

  • U:你来,咱们聊聊啊。
  • C:来了,聊吧。
  • 。。。聊毕。。。
  • U:美好的时光总是短暂,慢走,不送,再见。(回头吩咐:去,给丫再加一把关税)
  • C:再会。

声明:以上对话纯属码路工人本人脑补虚构。

米国大统领特浪扑,开推特施政治国之先河,起国际贸易多争端。

大统领就像学过《论持久战》,显然没有短期恢复正常贸易的迹象。

就在上上周五也就是我们的上上周末,又宣布要提高5500亿米元商品的关税。

相关具体新闻都能在网上看到,具体哪部分提高多少就不在此赘述了。

  • 犹记得去年,差点一把掐死中兴
  • 关税加吧加吧不是罪
  • 限“治”华为(治不动,这个硬气)
  • 一步步加征关税不断

背景二,骚乱的金融中心

  • 乱,你这次啥颜色?

    当看到骚乱新闻的报道,各位第一反应会想到什么?

    码工的话,高中时期读的杂志中,了解到颜色革命。
    多起就是发生在码工高中年代。

    没错,想到的是包括橙色革命,玫瑰革命,紫色革命,黄色革命等一系列的颜色革命。
    (在叙利亚,颜色革命发展为内战)

    无不与西方大国脱不了关系。(感兴趣的同学,可以去深入了解一下颜色革命)

    发生颜色革命的国家,内部定然少不了是有问题,外部环境的话则是美俄博弈(主要是对俄遏制。另,苏联已解体),

    颜色革命表面上非暴力的和平演变,实际上非暴力只是没有上升到军事行动而已,没有伤亡流血是不可能的。

    似乎应了马克吐温的那句,历史不会重演,但总是惊人的相似。

    如今,中美博弈下,国际大金融中心,香港,爆发了。

  • 骚乱事件过程参考 2019-08-05 的一篇网文:

    2019香港暴力事件起因 发生了什么事、暴力冲突始末

  • 简单概括下:

    • 2019/06 游行+袭警,开始搞事情
    • 2019/07
      多区捣乱,制造事端,狐尾渐显,挑战底线
      (冲击中联办,公然辱国,触碰“一国两制”原则底线)
    • 2019/08 洋军师指导(冲击机场),暴力升级,自掘坟墓

History does not repeat itself, but it does rhyme.

其实早有征兆。

  • 一切“独”毒瘤,终将被消除干净

    以前只听过“台du”,现在又冒出“港du”。

    还记得2014年的占中吗?
    当年搞不了事情,现在,依然搞不成事情。

上面说了两个背景,这背后有啥关系?

骚乱爆发前

  • 2019的3月、5月港反派赴美乞怜

  • ↑美国国务卿以及国会高层会见香港反政府分子

  • 美国国家民主基金会拨款

    主要靠美国国会和国务院等政府机构拨款的所谓“非政府组织”,以“推广民主”的名义,大肆在全世界范围内从事颠覆别国政府、破坏“不听话”国家的政治稳定的活动。

    之前在一篇文章中看到(可惜找不到原文了…抱歉。记得是–>),根据公开资料,该基金会在2018年的拨款,其中有一半左右的金额,是流向了中国的。这很“颜色”。

    扩展阅读:

    美国国家民主基金会(NED)与“颜色革命”

    当年的“占中”就有它。

骚乱期间

  • 美国驻港澳总领事馆官员会见香港骚乱头目

背后有啥关系?你猜啊。


现在(2019/09/02)

  • 上周五,也就是8/30号,央视网微信公众号,发表文章,标题,很带劲,三个字,

大收网

收的什么网?三名骚乱头目港独分子,纷纷被捕。

简短,有力。


香港大陆是一家

香港,与伦敦、纽约、东京等齐名的国际金融中心,“世界级的金融之都、一个世界公认的自由经济体,一个世界认可的单独贸易区”。

  • 香港在中国对外贸易中的战略意义?

    • 2018年香港地区的外贸总额接近中国大陆的26%。
      2018年中国大陆的外贸总额按美元算约为4.623万亿美元
      2018年中国香港地区的货物贸易进出口总额接近1.2万亿美元

    • 2018年,单从出口来看,整个中国出口额接近2.5万亿美元,而香港出口额就占了5692.4亿美元,约20%。香港从内地购入约2743.6亿美元商品,其中大部分是转口,只有少部分是香港本地居民消费。这意味着香港出口的5692.4亿美元中,约一半是大陆借香港通道出口到国外的。为什么这2000多亿美元商品要通过香港进行中转贸易,这里面值得玩味。

  • 从历史上谈香港是中国的“经济气口”

    香港借助它的特殊身份,每次在中国经济最艰难的时候,为这个民族留下一个“气口”。
    这里列几个时点:鸦片战争后,七七事变后,改革开放后

  • 1949年,为什么没有收回香港

    1949年10月14日,解放军解放广州之后,所有人都以为要接着直指香港,第4野战军15兵团甚至已经集结在了香港与大陆的边界,解放军突然刹住了脚步。

    十多年之后,大家才知道这一招后面的未雨绸缪。中苏关系破裂,中国被苏联孤立,在国际上陷入极其被动的状态。而就在这个时候,香港成了新中国与外部世界沟通唯一渠道了,为新中国与其他势力沟通,缓解中国外交冰冻,架起了桥梁。原来有意识留下香港这颗暗棋,就是为日后中苏矛盾后,中国不至于陷入孤立的状态。

    通过香港的这个当时的亚洲金融中心的地位,为新中国沟通海外关系留下一个气孔,让新中国能够在此后的冷战中,外交能够有主动斡旋的余地,而不是处处受制于人。

    直到今天,香港作为世界性的“自由港”,也是因为它的独立性缘故,香港可以做中国不能做的事情,外国人相信香港与中国是不同的,但无论如何,香港人毕竟是炎黄子孙,这里的人与大陆同文同种,无论表面上多么中立,它一定是偏向这个国度的。

    所以香港180年多年来,大陆近十万多种产品卖往香港都是零关税。

  • 2019年,“毛衣”大战中的“香港支点”

    • 香港是大陆进行国际货物贸易的无摩擦中转站

      目前,大陆对外最大贸易地区,排名第一的是美国,总比占19%。排名第二的是哪个?日本?韩国?德国?俄罗斯?
      不,是中国香港。

      大陆对香港贸易总比占14%。这是什么水平呢?对日、对韩、对德三国贸易总和才勉强达到对特别行政区香港的贸易。香港不过七百多万人口,面积一千平方公里,撑破肚皮也消化不了大陆14%的出口。

      为什么大陆还能年年往香港出口这么多货物?很简单,香港是大陆对外贸易的中转站。

      • 香港作为自由港,进口除了个别产品之外是没有关税的,清关也极快。
      • 作为一个独立关税区,它本身就是相当多国际自由贸易条约的成员,它的出口货物,能享受到更多的配额,更加优惠的税率。大陆的产品,先进入香港,换个包装,打个标签,披上一个香港的马甲之后,再由香港出口到世界各地,一定程度上绕过部分发达国家对内地进出口的限制,减少由内地直接出口的关税。
      • 其中一部分甚至出口到了美国,而且巧妙地避开了贸易摩擦。也就是说,世界第二大经济体的七分之一的产品,是通过香港销往整个世界的。香港是大陆合法合理地绕过各种贸易壁垒的透明通路。
    • 香港港交所是大陆企业吸收国际资本的资金池

      放眼整个世界,能与欧美交易中心纽约、芝加哥、伦敦三巨头抗衡的,只有东亚的香港、东京、新加坡。

      企业决定在哪个交易所上市,募集多少资金,反映了这片地区的市场竞争力。2010年10月友邦保险在香港首次公开募股(IPO),集资1590亿港元,成为港股近九年来最大新股。

      2018年,港交所祭出25年来最颠覆也最具争议的新股改革方案:允许同股不同权的公司赴港上市、生物科技公司上市不要求盈利。改革效果立竿见影,大批新经济公司和生物科技公司涌向香港,包括小米、美团、映客、海底捞、中国铁塔……港交所一度出现8家公司同时敲锣的盛况,导致现场锣不够使、摄影师不够使、记者不够使。同年,港交所以218家上市公司、2880亿港元的融资额成为全球IPO市场无可争议的双料霸主。

      在全球公开募股(IPO)市场的较量中,港交所在过去10年中有6年排名第一。为什么港交所有这么大的能量?

      因为香港是国际商业中心,是连接国际合作项目的枢纽城市。在外资眼中,香港金融体系是进入中国大陆市场最重要、最可靠的平台。这意味着,一个近在咫尺的资金池,源源不断地向大陆企业提供国际优质资本。

      因此,香港的金融体系是大陆应对未来美国可能的金融打击的最重要的资金池。

    • 香港是大陆吸收国际顶尖资源的入口

      米国正在把贸易摩擦中的对抗逐渐扩展到其它领域,最狠的招数,就是在科技、教育等领域卡住中国。最近美国先后采取了针对来自中国的留学生和访问学者的限制措施,以及针对高科技企业的金融限制。这个时候,更需要重视香港国际自由港的地位,一旦美方采取全面制裁措施,香港将是与大陆唯一一个有紧密关系的国际城市。

      香港可以不受阻碍地参与国际学术交流,吸收全世界的最新科技。在任何情况下,哪怕被封锁,大陆也可源源不断地派遣学生前往香港学习,再从香港吸纳各种人才。

    • 香港是人民币国际化的头号阵地

      人民币国际化难度巨大,绝非只是在国外开设银行发售人民币那么简单,人民币得有人敢用、敢收才行。那么,从哪里开始培养国际资本、企业使用人民币结算的信心呢?

      2004年,中国大陆开始将香港作为人民币国际化的桥头堡,试图将香港建设成为人民币离岸中心。2007年,首笔人民币债券在港发行;2009年,跨境贸易人民币结算在港试点开展;财政部在港发行人民币国债;2010年,简化跨境贸易人民币结算;2014年,沪港通开启。

      香港的金融机构陆续开办人民币业务,近几年越来越多的银行柜面和ATM机提供人民币存取款服务,人民币大量地通过香港流往境外。今天的香港就是人民币变成完全可兑换的国际货币的集散中心。

    以上关于香港的分析内容,有删减地节选/摘自 白格尔《中美博弈的“香港支点”》
    智谷趋势公众号下原文已删除,故无法再贴链接
    在微博下找到了一处转载。微信下不能贴站外链接,需要手动复制访问。
    https://weibo.com/ttarticle/p/show?id=2309634405349254824046
    推荐阅读

  • 米国借机取消香港窗口地位

    香港拥有独立关税权,而这影响了其对华“毛衣”战的效果。

  • 香港虽重要

    不只是因为外部影响,事件背后也暴露的香港多年来自身存在的问题。
    比如殖民情节,比如国民教育。

    不是香港不行了,是大陆近年太行了。
    昔日对岸小渔村深圳,已渐超越香港。

    我们的内地,新的发展政策不断出台,经济有活力,有市场,有人才,比如在座的各位。

    治安良好社会稳定经济繁荣的环境下,有什么理由不好好工作好好生活?

国运

你加征关税,我开自贸区;你想搞颜色?没收你木偶。

古有圣贤者,今是文化人儿。
站在道义角度,高下立判。

  • 中东战争也好伊拉克战争也罢,亦或当前对伊朗的制裁打压,真正的原因是为什么?路人皆知。

  • 全球化进程中的单边主义、贸易保护主义是否是开倒车逆历史而动?

咱啥也不懂,咱也不敢乱说,留给时间去证明吧。

就先扯到这吧,再见。

JavaScript之不可亵玩系列-04 给整数加千分位符

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


JavaScript之不可亵玩系列-04 给整数加千分位符

今日玩法:

  物料:3位以上整数一个,JavaScript语句若干

  把玩:给整数加千分位符


  • 玩法1:每3位数字加逗号,剩余头部1~3位数字也加逗号

    • 玩法解析:

      • 第一部分

        1到3位数字

        位数能整除3时,剩余头部0位,视为没有第一部分或第一部分视为3位,都可以。

        用到的相关正则语法有

        1
        2
        \d{数字位数}      // 本例此处要求数字位1到3位
        (\d{1,3})(?=限定用第二表达式) // 第二表达式即参照下文第二部分
      • 第二部分

        匹配连在一起的三位数字,出现一次或多次,并且结尾。

        用到的相关正则语法有

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
            \d{3}+$   // 3位数字出现一次或多次
        ```

        - 然后,将匹配到的第一部分替换为其内容加逗号,就完成了


        - ### 撸一把:

        ```js
        var arr = 12345678

        var regExp = /(\d{1,3})(?=(\d{3})+$)/g

        var ret = arr.toString().replace(regExp, '$1,')

        console.log(ret) // 12,345,678

  • 玩法2:利用单词边界的骚操作

    • 玩法解析:

      • 找到分单词边界,限定条件:第二部分

      • 第二部分:又分两部分

        • 1.第一组,三位数字,出现一次或多次
        • 2.第二组,单词边界
      • 然后,将贪婪匹配结果(也就是非单词边界)替换为逗号就可以了

    • 撸一把:

      1
      2
      3
      4
      5
      6
      7
      var arr = 12345678

      var regExp = /\B(?=((?:(\d{3}))+(?:(\b))))/g

      var ret = arr.toString().replace(regExp, ',')

      console.log(ret) // 12,345,678

      这个骚操作 GET 到没有啊。
      反正以码路工人的脑瓜是想不出,这个是网上查的。(不是不贴,出处忘记了…)

      收工。


–END–


公众号(码路工人有力量)

欢迎关注分享,一起学习提高吧。
QRCode/微信订阅号二维码
CoderPowerQRCode

JavaScript之不可亵玩系列-03 用正则做密码校验

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


JavaScript之不可亵玩系列-03 用正则做密码校验

今日玩法:

  物料:input 密码若干,JavaScript 语句与正则表达式

  把玩:RegExp.test,检测目标:
     密码长度6-12位,由数字、小写字母、大写字母组成,必须至少包括2种


  • 玩法解析:

    • 正则基础

      先列出下文用到的知识点,看看以下你是否都掌握了呢。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      ()      // 用于分组
      ^ // 表示以某字符开始,写在开头
      $ // 表示以某字符结尾,写在结尾
      [] // 方括号表示匹配范围
      [^] // 方括号里面的 ^ 表示取反,即匹配指定字符以外的
      \d // 等同于 [0-9],即数字
      ?! // 表示匹配后面的内容取反,即不是后面的内容
      + // 表示出现一次或多次
      {} // 指定出现的次数,可以指定最小次数与最大次数,另有省略形式:
      {1,} // 至少一次,等同于 +,最多不限
      {2, 3} // 至少2次,至多3次
      {4} // 只匹配出现4次

      自知土得掉渣,怕误导大家,还是贴上正规W3shool的标准表述:
      JavaScript RegExp

    • 至少包含两种:

      • 可以包含两种
      • 可以包含三种
      • 不可以只包含一种
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
          // 第一组
      (?!^\d+$) // 不管有几位,只要全是数字,就不对

      // 第二组
      (?!^[a-z]+$) // 不管有几位,只要全是小写字母,就不对

      // 第三组
      (?!^[A-Z]+$) // 不管有几位,只要全是大写字母,就不对

      // 没有匹配到,0位也不对
      ```
      - 由三种字符组成:数字,小写字母,大写字母
      - 密码长度6-12位
      ```js
      (^[0-9a-zA-Z]{6,12}$) // 匹配字符 + 匹配重复次数
    • 完整撸一把:

      结果也都列出来了,注释写的明白儿的。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      var pwdReg = /(?!^[0-9]+$)(?!^[a-z]+$)(?!^[A-Z]+$)(^[0-9a-zA-Z]{6,12}$)/

      // 只有数字:false
      console.log(pwdReg.test("123456"))

      // 只有小写:false
      console.log(pwdReg.test("aabbcc"))

      // 只有大写:false
      console.log(pwdReg.test("AABBCC"))

      // 类型符合,但位数不足6:false
      console.log(pwdReg.test("123ab"))

      // 类型符合,但位数超过12:false
      console.log(pwdReg.test("1234567890Ab3"))

      // 小写 + 大写:true
      console.log(pwdReg.test("aBcdef"))

      // 大写 + 数字:true
      console.log(pwdReg.test("A12345"))

      // 小写 + 数字:true
      console.log(pwdReg.test("a12345"))

      // 大写 + 小写 + 数字:true
      console.log(pwdReg.test("Aa1234"))

      很多童鞋反应正则好难学啊,正则不要学,要写。俗话说,

      “这位同学本不懂正则,写的多了也便懂得了。”

      每次写每次查语法的码路工人也计划通过多写写来掌握一下这个神器,
      边写边学,一路有你,走起~

以上,收工。

–END–


公众号(码路工人有力量)

欢迎关注分享,一起学习提高吧。
QRCode/微信订阅号二维码
CoderPowerQRCode

JavaScript之不可亵玩系列-02 数组乱序与洗牌算法

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


JavaScript之不可亵玩系列-02 数组的随机排序

今日玩法:

  物料:整数数组一个,JavaScript语句若干

  把玩:数组乱序、洗牌


  • 玩法1:利用数组排序函数

    • 玩法介绍:

      • 来认识一下数组自带排序函数Array.prototype.sort

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        // 准备一个有序整数数组
        const arrNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

        // 排序处理
        const arrRet1 = arrNums.sort(function(right, left){
        // 同 return -1
        return right > left
        })
        console.log('升序排列:', arrRet1)
        // 升序排列: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

        // 排序处理
        const arrRet2 = arrNums.sort(function(right, left){
        // 同 return 1
        return right < left
        })
        console.log('降序排列:', arrRet2)
        // 降序排列: [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]

        sort方法是可以用来排序的,可以自定义排序函数作为回调传进去。

        就在自定义的排序回调函数中,比较结果,如果传一个随机数(大于0或者小于0),

        那不就可以把顺序打乱了嘛。

      • 随机数函数Math.random()

        随机数函数Math.random()可以返回一个1以内的小数,

        0 < Math.random() < 1,用它减去0.5,可能大于0可能小于0。

  • 撸一把:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // --------------------------------------------------
    // 00. array of numbers
    const arrNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    // --------------------------------------------------
    // 01. shuffle in a normal-way

    const normalShuffle = function (arr){
    return arr.sort(function(){
    return Math.random() - 0.5;
    })
    }

    console.log('normalShuffle:', normalShuffle(arrNums)) // 乱序数组结果

    多执行几次洗牌函数,看看随机乱序结果如何。


  • 玩法2:经典洗牌算法

    • 玩法介绍:

      遍历数组,将遍历过程中每一个元素都与随机数下标元素进行对调,实现数组乱序。

      这就是经典的洗牌算法,比起上面玩法1就显得高端一些了,随机排布更均匀。

    • 撸一把:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      // ------------------------------------------------- 
      // 02. Classic Shuffle

      const classicShuffle = function(arr){
      // parameter check
      if(!arr || toString.call(arr) !== '[object Array]' || !arr.length){
      return;
      }

      // get random index
      function randomIndex(min, max){
      if(max == null){
      max = min;
      min = 0;
      }
      return min + Math.floor(Math.random() * (max - min + 1))
      }

      const count = arr.length;
      // copy to operate
      const arrRet = Array.from(arr);

      // shuffle process
      for(let i = 0; i < count; i++){
      let j = randomIndex(count - 1);
      let x = arrRet[i]
      arrRet[i] = arrRet[j]
      arrRet[j] = x
      }

      return arrRet;
      }

      console.log('classicShuffle', classicShuffle(arrNums))
      // -------------------------------------------------

      经典洗牌算法两个要点,

      • 循环每一个元素,index
      • 得到随机数下标,randomIndex

      交换数组中以上两个元素位置,简单高效。

      注:关于是否操作原数组,这个看需要怎么做都可以

      收工。


–END–


公众号(码路工人有力量)

欢迎关注分享,一起学习提高吧。
QRCode/微信订阅号二维码
CoderPowerQRCode

JavaScript之不可亵玩系列-01 查找数组中最大最小值

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


JavaScript之不可亵玩系列-01 查找数组中最大最小值

今日玩法:

  物料:整数数组一个,JavaScript语句若干

  把玩:找出数组中的最大值跟最小值


  • 玩法1:挨个盘查,找出目标

    • 玩法介绍:

      执行一遍循环,通过中间变量minmax,直接挑出最小最大值

    • 撸一把:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      // 定义整数数组
      var arr = [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      // 查找最小最大值函数
      var findMinMax = function (arr) {
      if (!arr || !arr.length || toString.call(arr) !== '[object Array]') {
      return
      }

      var min, max, i
      var count = arr.length

      min = max = arr[0]

      if (count === 1) {

      // since "" null => will be recgonized as a Number

      if(toString.call(min) === 'object Number' && !isNaN(min)){
      return { min: min, max: max }
      }
      return undefined
      }
      // 以上 check 处理可以忽略,纯属闲得

      for (i = 1; i < count; i++) {
      var current = arr[i]
      if (toString.call(current) !== '[object Number]' || isNaN(current)) {
      continue
      }

      // 循环一遍,通过中间变量 min/max,挑出最小最大值
      if (current < min) {
      min = current
      } else if (current > max) {
      max = current
      }
      }

      return { min: min, max: max }
      }

      var ret = findMinMax(arr)

      console.log(ret) // {min: 1, max: 21}

  • 玩法2:排个序,冒个泡,谁大谁小难不倒

    • 玩法介绍:

      两个循环,一个让值小的靠左站,另一个让值大的靠右站,自觉排队效率高。

    • 撸一把:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      // 定义原始整数数组
      let numbers = [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      // 排序函数
      function funcSortMinMax(arrNum) {
      let low = 0;
      let high = arrNum.length - 1

      // 找到最大值放右边
      // 期间每次比较会把相对大的往右移
      for (let i = low; i < high; i++) {
      if (arrNum[i] > arrNum[i + 1]) {
      [arrNum[i], arrNum[i + 1]] = [arrNum[i + 1], arrNum[i]]
      }
      }

      // 找到最小值放左边
      // 期间每次比较会把相对小的往左移
      for (let j = high; j > low; j--) {
      if (arrNum[j] < arrNum[j - 1]) {
      [arrNum[j - 1], arrNum[j]] = [arrNum[j], arrNum[j - 1]]
      }
      }
      }

      console.log('查找前:', numbers) // [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      funcSortMinMax(numbers)

      console.log('查找后:', numbers) // [1, 2, 5, 3, 6, 7, 8, 9, 12, 21]

      console.log('最小值:', numbers[0]) // 1
      console.log('最大值:', numbers[numbers.length - 1]) // 21
      //

      可以看到,找出来最小值最大值了,它们分别排在了首末的位置。

      优秀的你一定想到了,稍微再整整,不就完成数组排序了吗?

    • 没撸够,再撸一把:

      上面的代码,已经能够查找出最小值跟最大值了,

      但是这么做有点牛刀的感觉了,再添把力,一个双向冒泡排序算法就出来了。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      // 定义原始整数数组
      let numbers = [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      // 排序函数
      function funcSort(arrNum) {
      let low = 0;
      let high = arrNum.length - 1

      while(low < high){
      // 找到最大值放右边
      // 期间每次比较会把相对大的往右移
      for (let i = low; i < high; i++) {
      if (arrNum[i] > arrNum[i + 1]) {
      [arrNum[i], arrNum[i + 1]] = [arrNum[i + 1], arrNum[i]]
      }
      }
      // 未排完元素中最大已找出,不再作为比较对象
      high--

      // 找到最小值放左边
      // 期间每次比较会把相对小的往左移
      for (let j = high; j > low; j--) {
      if (arrNum[j] < arrNum[j - 1]) {
      [arrNum[j - 1], arrNum[j]] = [arrNum[j], arrNum[j - 1]]
      }
      }
      // 未排完元素中最小已找出,不再作为比较对象
      low++
      }
      }

      console.log('排序前数组:', numbers) // [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      funcSort(numbers)

      console.log('排序后数组:', numbers) // [1, 2, 3, 5, 6, 7, 8, 9, 12, 21]

      console.log('最小值:', numbers[0]) // 1
      console.log('最大值:', numbers[numbers.length - 1]) // 21
      //

      收工。


–END–


公众号(码路工人有力量)

欢迎关注分享,一起学习提高吧。
QRCode/微信订阅号二维码
CoderPowerQRCode

[杂谈-随口一说]Keep learning!

随口一说

好些日子没有发表公号文章了,

想说,最近真是忙呢,有时候觉得真忙,有时候还觉得忙的脑子一团乱麻。

原计划的公众号文章将近一个月了一篇没写,时间,都去哪儿了?

周末自己搬家,工作中的任务,学习的课程,课后作业,家里杂务……
还有,半新不旧的码路工人公众号……

但仔细想来,真的有那么忙吗,很多时候人们(普通如我)忙只不过是因为能力不足,不足以高效地应对并发的事情,CPU老旧该升级换代啦。

也许这个比方并不恰当,因为不能换脑袋,但是,人可以学习啊。
通过学习,更新自己,迭代自己,带着空杯心态,时常要给自己清个零。

时间不是管理的,应该重视单位时间里的产出,而不是重规划将事情规定在相应的时间段,因为,总会有突发总会有不确定性。大意是这样,观点来自李笑来老师的《把时间当作朋友》(表述可能有偏差,建议去读李老师的书)。

在这个信息爆炸的互联网时代,获取信息跟吃饭睡觉一样简单平常,想要学习也变得异常简单。

  • 技术不断发展,开发者也要不断进步,跟上时代更新自己。
  • 多读书,读好书,拓宽知识面。
  • 作为码农,跟着大佬,能学到很多自己琢磨不到的sao操作。

关于开发,最近在做什么

作为偏C/S的开发者,工作上,在给一个项目做画图(Chart)的控件,语言C#

平时抽空还要学习前端,目前阶段在JS进阶。

工作学习中也有丁点的记录,之后整理下也会将适合的发上来。


结尾

编程是件有意思的事儿,做的越多,越 happy。
保持终生学习~

--END--

我的公众号二维码
CoderPowerQRCode

[ES6系列-07]Generator Function: 生成器函数

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


Generator function 生成器函数ES6中新增的语法糖,本质上讲,就是以封装成一个遍历器的形式,让编码的你获得程序的执行控制权,通俗地说就是,流程控制上,踹一脚,走一步,不要太暴力~

0.前言

要说到生成器函数,就不得不提到javascript的异步编程方式演进史。

(不能跑题不能跑题不能跑题)

  • 1.普通的回调函数方式(callback)
  • 2.事件/发布–订阅者模式(event/publisher–observer)
  • 3.Promise
  • 4.Generator
  • 5.async/await(在ES8/ES2017中正式提出)

Read More

[CSS布局基础]居中布局的实现方式总结

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


做Web开发少不了做页面布局。码路工人给大家总结一下水平居中,垂直居中,水平垂直居中的布局实现。


1.水平居中

通过以下四种方式,将实现下图中的效果

Horizontal-Center

1.1 利用父级 text-align: center; 加子级 display: inline-block;(只要是inline-的都可以)实现子元素水平居中

Read More

[ES6系列-06]展开操作符 Spread Operator 就像解压到这里

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


在前面的文章中,介绍了...在获取剩余参数中的作用。它的主要任务还是作为展开运算符。


1.它能展开数组

数组是JavaScript中重要的类型,经常要用到数组操作,ECMAScript6中也添加了很多方便的方法,这里不讲数组对象新增的方法,只说说展开操作符常用的用途。好处自己体会。

1.1 浅拷贝一个数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* eg.0
* Array Copy Example
*/
//----------------------------------------

const src = ["The Rolling Stones", "U2", "Oasis"]
const des = [...src]

console.log(des)

// (3) ["The Rolling Stones", "U2", "Oasis"]
// 0: "The Rolling Stones"
// 1: "U2"
// 2: "Oasis"
// length: 3
// __proto__: Array(0)

//----------------------------------------

这直接省去了数组循环啊。

1.2 合并两个数组

合并的同时还可以另外添加其它元素

Read More