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 条评论
登录 后参与评论

相关文章

来自专栏刘望舒

web前端 到底怎么学?

那么在讲 web前端怎么学 这个大命题之前呢,依据我本人的尿性,还是得先把你拉入坑,让你在坑里好好学 O(∩_∩)O 由于第一篇文章,有说到:

21020
来自专栏java一日一条

每个程序员必看:如何在40岁后继续做软件开发?

这是一个 42 岁的开发者所写经验分享文章.并且列出一些他 18 年多身为软件开发者的经验谈.许多部分看完后都会希望自己当时就能够了解,所以很推荐不论是新手或是...

9810
来自专栏BestSDK

万能的编程语言

image.png 我刚开始写程序那会,十分在意于各种编程语言之间的比较。每次自己使用的语言被别人说三道四,心里就跟打翻了五味瓶一样,很不是滋味。 同样情况下...

537100
来自专栏程序员互动联盟

程序员最痛恨的五句话

1. ? 电脑白痴: 能不能帮我修下电脑,开不了机了 (学计算机的对于电脑任何东西应该了如指掌,修个电脑还不是小事一桩) 程序员: 对不起妹子,你去找修电脑的...

391100
来自专栏斑斓

构建你的技术标签

作为一名程序员,又或者IT工作者,拼搏在技术快速变迁的大潮流中,其实是一种幸运,毕竟我们无需陷入重复的枯燥生活之中。然而要跟上技术发展的脚步,真的太累了,就怕步...

31630
来自专栏机器人网

英大学生发明倒酒机器人,调酒师也要失业了?

据英国《每日邮报》6月28日报道,英国利兹大学的五名学生合作发明了一种会倒酒的机器人,并声称该机器人有一天可以取代调酒师的工作。这五名学生是受到了当地工程公司Q...

36960
来自专栏一个爱吃西瓜的程序员

如何有效地自学一本陌生的专业书籍?

昨天发了那篇推文之后,我掉粉了,对,就是关注人数少了两个。可能是觉得继续关注我也获取不到什么有价值的知识或信息了吧。关注或不关注,我就在那里,随缘吧,哈哈~ ...

34940
来自专栏黄成甲

怎样成为解决问题的高手——掌握系统循环图(连载六)

在连载三讲了系统思维就是选择、改善或构建“框架”,以更快速、更全面、更深入地系统思考和表达的思维方式。使用框架实现更快速、更全面、更深入解决问题的关键在于框架的...

1.2K10
来自专栏高性能服务器开发

“21天教你学会C++”

下面是一个《Teach Yourself C++ in 21 Days》的流程图,请各位程序员同仁认真领会。如果有必要,你可以查看这个图书以作参照:http:...

23110
来自专栏机器人网

没有任何机械基础,如何自学机械设计?

机械设计第一阶,学习《工程图学》。 按照大学的计划应该是先学习数学的,如果你是在机械行业工作那真是有着极大的优势,可以结合实践,边实践,边理论学习。先感性认识,...

52060

扫码关注云+社区

领取腾讯云代金券