20180922_ARTS_week13

栏目: JavaScript · 发布时间: 6年前

内容简介:第十三周,算法题 Longest Common Prefix,看了一篇讲 JavaScript 不好的地方以及如何规避的文章,记录JavaScript 在日期操作方面的小 tip,分享了对于知识付费。这个题比较简单,用循环硬做也可以,这里做了一个小小的优化,先排序了一下,如果不排序的话,遇到如果不想排序,也可以先遍历一下,找到最短的那个作为循环次数。

第十三周,算法题 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 质量参差不齐。

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

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

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

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

碎碎念

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

微信公众号:程序员的诗和远方

公众号ID : MonkeyCoder-Life

20180922_ARTS_week13


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Security, Privacy and Commerce, 2nd Edition

Web Security, Privacy and Commerce, 2nd Edition

Simson Garfinkel / O'Reilly Media / 2002-01-15 / USD 44.95

Since the first edition of this classic reference was published, World Wide Web use has exploded and e-commerce has become a daily part of business and personal life. As Web use has grown, so have ......一起来看看 《Web Security, Privacy and Commerce, 2nd Edition》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试