20180922_ARTS_week13

第十三周,算法题 Longest Common Prefix,看了一篇讲 JavaScript 不好的地方以及如何规避的文章,记录JavaScript 在日期操作方面的小 tip,分享了对于知识付费的一些看法。

Algorithm

/**
 * Longest Common Prefix
 * https://leetcode.com/problems/longest-common-prefix/description/
 * 
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function (strs) {
    if (strs.length == 0) {
        return "";
    }

    strs.sort()  // 按字母顺序
    var len = strs.length;
    var loopCount = strs[0].length;
    var num = 0;

    for (var i = 0; i < loopCount; i += 1) {
        if (strs[0][i] == strs[len-1][i]) {
            num += 1;
        } else {
            break;
        }
    }

    return strs[0].substr(0, num);
};

console.log(longestCommonPrefix(["flower","flow","flight"]))  // fl
console.log(longestCommonPrefix(["dog", "racecar", "car"]))   // ""

这个题比较简单,用循环硬做也可以,这里做了一个小小的优化,先排序了一下,如果不排序的话,遇到 ["aaa","aa","aaa"] 这种形式就会出错。

如果不想排序,也可以先遍历一下,找到最短的那个作为循环次数。

Review

Javascript, the bad parts, and how to avoid them

https://medium.com/@Rewieer/javascript-the-bad-parts-and-how-to-avoid-them-1a7c9bc5a0dd

作者在文章中介绍了几个 JavaScript 不好的地方,比如:

类型

比如在判断一个变量是不是对象的时候,你需要 if (typeof myObject === "object" && myObject !== null),因为 null 也是个对象。关于这个的解决方案,作者推荐使用 TypeScript 和 FlowType。

数字类型

JavaScript 中的数字是双精度浮点型,这会造成一些困扰,比如

0.1 + 0.2
// 0.30000000000000004

也就是 0.1 + 0.2 === 0.3 是不成立的。 作者推荐的解决方案是使用 decimal.js

数字和字符串加法的奇怪问题

10 + "10" // "1010"

这会产生一个非常容易忽略的问题,当用户输入的时候,都是字符串型的,如果不记得做类型转换,直接做加法处理就会出错。 解决方案,当然是记得先用一堆 parseInt, parseFloat, .toString() 处理 :-)

回调地狱

关于 JavaScript 回调地狱的问题已经是老生常谈了,解决方案方面作者推荐使用 PromiseAsync/AwaitGenerator 来优化。

关于回调地狱和 Async/Await 的内容也可以参考我之前写的文章 异步多图加载这件小事儿(Promise与async)

Tip

记录几个 JavaScript 在日期操作方面的小 tip。

// 根据日期获取当前是星期几
getWeek(day) {
   const weekArr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
   return weekArr[day];
}
getWeek(new Date(x).getDay()) 

// 返回日期如果是 10 以下,在前面补 0 
function getFull(n) {
    return (n > 9 ? '' : '0') + n;
}
var x = getFull(3);  //03
var y = getFull(11);   //11

// 格式化时间
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
调用:
var time1 = new Date().Format("yyyy-MM-dd");
var time2 = new Date().Format("yyyy-MM-dd hh:mm:ss");

Share

这周想分享一点对知识付费的想法。

最开始接触知识付费是从得到开始的,再到在行,知乎 Live,掘金小册,极客时间,接触这类产品也有一段时间了。最大的感想是要懂得选择,不要盲目付费。

要知道人的精力时间是有限的,花几十到几百买个专栏自己就能学会是不现实的。其实和买书一样的道理,不是你买了就会了,还需要投入大量的时间去学习实践练习,可能才能大致了解,期望仅仅通过一个专栏就获得很大提升是不现实的。

除此之外,还要特别注意知识付费产品的质量。知识付费市场现在正处于一个风口,不单单是各种产品不断涌现,各种知识输出者也想分一杯羹,造成的现象就是各种专栏或者 Live 质量参差不齐。

特别要警惕和当下热点结合的专栏,比如微信小程序。很多想学微信小程序的人可能连相关文档都没怎么看过,看到专栏就跑去买,殊不知专栏大多是把小程序文档内容大概过一遍,与其这样,不如自己啃文档自学,还能锻炼学习能力。所以最好能先看看专栏的目录,然后对应去找一些资料,看是不是很浅的东西,不要无脑买。

其实买书也是这个道理,一些书找一堆人写推荐,不一定就是因为这本书多么好。

说了挺多,感觉挺负面的,不过知识付费有其积极的作用,可以作为一个好的筛选,然后对分享者也可以产生一定的激励,做专栏可比卖书要赚的多,而且能有互动。

最后,用心学,总能学到东西的。


碎碎念

记录一些所思所想,写写科技与人文,写写生活状态,写写读书心得,主要是扯淡和感悟。 欢迎关注,交流。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Canvas基础-粒子动画Part4

    在之前的文章 Canvas基础-粒子动画Part2 和 Canvas基础-粒子动画Part3 中分别讲了用图片和文字做粒子动画,今天我们来把代码简单整理一下,...

    Bob.Chen
  • Canvas基础-粒子动画Part2

    紧接上一篇文章 Canvas基础-粒子动画Part1 其实这篇早在一个星期之前就应该发了,无奈事情太多,而且我又跑去写微信公众号了。 粒子动起来 有了上一...

    Bob.Chen
  • 20180728_ARTS_week05

    这题有点犯难,上面是 Discuss 中的一个解法,看了之后挺好理解的,要找回环字符串,就从 a 和 aa 一阶和二阶这两种形式往两边找,感觉特别巧妙。

    Bob.Chen
  • 程序员必须了解的数据结构:Array、HashMap 与 List

    当开发程序时,我们(通常)需要在内存中存储数据。根据操作数据方式的不同,可能会选择不同的数据结构。有很多常用的数据结构,如:Array、Map、Set、List...

    智能算法
  • HTML5版的String Avoider小游戏

    HT_hightopo
  • HTML5版的String Avoider小游戏

    HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,...

    HT for Web
  • CSS通用类和“结构与样式分离”

    过去的几年里,我编写CSS的方式已经从“语义化”转变为“函数式”(经常被这样称呼)了。

    疯狂的技术宅
  • “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)

    在前一部分的最后,我们给出了一个寻路的示例,在大多数情况下,运行还算良好,但是有一个小问题,如下图: ? 很明显,障碍物已经把路堵死了,但是小球仍然穿过对角线跑...

    菩提树下的杨过
  • 聚类统计图

    前天有网友提到了这样的需求:1、地图的统计图展示;2、统计图的聚类。统计图的展示非常好理解,但是什么是统计图的聚类的?所谓统计图的聚类是按照地图等级与数据等级,...

    lzugis
  • Openlayers2中统计图的实现

    在前文中,介绍了Arcgis for js和Openlayers3中统计图的实现,在本文,书接上文,介绍在Openlayers2中,统计图的实现。

    lzugis

扫码关注云+社区

领取腾讯云代金券